Effective C 學習筆記

2021-06-19 11:25:51 字數 2100 閱讀 2206

學習effective c++已經有相當長的一段時間了,今天抽出時間又堵了一遍第一部分

c語言;c++以c語言為基礎,幾乎支援所有的c語言成分,例如區塊、語句、預處理、內建資料型別、陣列、指標等,c語言的侷限是:沒有模板、沒有異常、沒有過載……

物件導向的c++,也就是加上了物件特性的c,類、封裝、繼承、多型、虛函式等,這也是我們最長學到的c++語言部分。

template c++ ,即c++泛型程式設計

stl,stl是乙個template程式庫。

c++並不是一種簡單的語言組合,而是多種次語言的聯合,各種次語言有自己的程式設計規範,因此高線的c++程式設計規則取決於你使用的是那一部分的c++成分。

以const代替#define定義常量,兩種特殊情況:

常量指標,根據const在指標定義星號的前後位置的不同,可能定義的是指標常量或者是指標指向的物件是常量

class的專屬常量,將常量的作用於限制與class內部,通常定義為 static const type var形式;

class a

//實現檔案

const int a:: nitem = 5;//宣告

……

因為陣列的大小在編譯起勁必須知道:對於class中的const常量,如果不能在class內部初始化,可以採用enum

class a;

int acore[nitem];

……}

對於用define實現的巨集,可以使用道理有tempate的inline函式來完成此項功能,並且inline函式可以獲得巨集的效率(展開),函式可以預見的行為以及型別安全。

總結:對於單純的常量,最好以const物件或者enums替換#define

對於形似函式的巨集,最好改用inline函式替換define

const允許高速編譯器和其他程式設計師某值是不可以改變的。

可以用它來修飾clas外部的全域性變數、namespace中的常量,或孜孜檔案、函式、或者區塊作用於中的常量

對於指標和指標所指向的值,const的定義,vh昂視考試的乙個重點,主要記住const是在*前面還是後面就可以了。

stl是根據指標穿件出來的,迭代器就是t*,加上const 修飾的指標部分,迭代器做指正的值是可以改動的,常量迭代器有const_iterator修飾,

您函式返回乙個常量或者常量應用常常可以減少錯誤出現的可能。

const成員函式字面上理解不修改內的non-static陳亮變數,對其有兩種觀點可以理解:

bitwise constness即物理常量,及不概念函式的任何成員,實際上若返回指標,通過修改指標值,可以改變指標所指向的內部成員,因為存在一些問題

logical constness通過引入mutable,可以可以修改部分bit的值,但是客服端無法檢測出來,就可以了。

const成員函式和non_const成員函式,在non-const中通過型別前置轉換,可以避免重複**的發生。

一、內建型別直接初始化

二、類物件可以通過建構函式完成初始化,

要點在建構函式中賦值和成員列表初始化的差別的,建構函式內部是賦值,會繫那是用預設的建構函式社初值,然後立刻對他賦值。 通常使用初始化列表效率要高一些。

成員列表中成員變數初始化的順序是固定的,由成員變數定義的順序確定

對於non local static變數初始化順序討論

static物件生命週期從構造出來後直到程式結束為止。stack和based-heap變數不在此列。 函式內部的static變數成為localstatic其他為non local static變數 。,由於全域性的, 帝國易於namespace的static變數其初始化順序無法去頂頂,可以採用專屬函式,將其修改為local static 變數的方法,其返回乙個紙箱該物件的引用來解決。

小結:為內建型物件進行手工初始化,因為c++不保證初始化他們

建構函式最好使用成員初始化列,而不要再建構函式內部賦值,初始化列列出的成員變數,其排列次序,應該盡量與他們呢咋iclass中宣告的順序一致

為免除「跨編譯單元之初始化次序」問題,輕微local static 物件奇幻 non local static 物件。

編譯單元:是指產生單一目標檔案的那些原始碼。基本上他們是在單一的原始碼檔案加上其所含有的標頭檔案。

Effective C 學習筆記

1 c 是乙個複合式的語言 c 中不同部分有著不同的語言特性,例如 1.1 在c中傳遞形參時,按照值傳遞比按照指標傳遞效率更高 1.2 在物件導向程式中,物件要按照const引用而不是按照值傳遞 1.3 在stl程式設計中採取按照值傳遞方式 所以說c 中沒有統一的準則,要按照不同的特性採取不同的使用...

effective c 學習筆記

如果不考慮應用程式的使用場合,僅僅考慮語言的靈活性,我贊成作者的想法。但是不同的應用它會有不同的效能要求,所以語言的選擇,應該是用 最適合 條款去選擇。使用巨集定義常量,若定義在標頭檔案中,則所有包含標頭檔案的都可以使用。巨集定義,在預處理的時候進行替換。巨集定義一些簡單的函式,可以減少呼叫開銷,但...

effective c 學習筆記

連續賦值語句a b c優先順序為從右到左。為什麼返回乙個referenceto this指標要比返回其它型別好?如果返回類物件,b c呼叫一次拷貝建構函式,返回乙個臨時變數,a b又呼叫一次賦值拷貝函式。浪費了拷貝時間。大概目的是防止同時delete物件後,出現的異常。建議 copying函式應該確...