Effective C 閱讀筆記

2021-09-26 20:56:20 字數 1548 閱讀 2694

2023年九月四日

緒論:

explicit的用法

用於建構函式,防止出現隱式型別轉換,例子:

#include using namespace std;

class object

~object()

};void dosomething(object b)

int main(int argc, char const *ar**)

copy構造和copy賦值的區別:

當新物件被定義時,使用copy構造,否則用copy賦值,(即看左面有沒有值)

關於命名習慣

駝峰命名法:

巨集全部用大寫,類的命名每個單詞首字母大寫,變數命名第乙個單詞首字母小寫,之後的每個單詞首字母大寫。

unit 1:

視c++為乙個語言聯盟:

c++由四部分組成:**c、object-oriented c++、template c++、stl,**通過這四部分理解c++內容。

盡量使用const,enum,inline替換#define

巨集的壞處:

其他人使用這個巨集時,可能不了解你定義的這個巨集,從而編譯器會提出莫名其妙的錯誤。

利用const代替巨集,如果在類內,使用static const代替巨集,則不會出現此情況。同樣,也可以使用enum代替巨集。

對於類似函式的巨集,例如

#define max_value(a,b) (a>b)? a : b

但是這樣有個非常大的問題就是,

int a = 5, b = 4;

max_value(a++,b);//a被累加兩次

max_value(a++,b*2);//a被累加一次

所以使用inline代替巨集

盡可能使用const

改善c++效率的乙個根本方法是以pass by reference-to-const方式傳遞物件。

c++的乙個於const相關的擺動場:mutable(可變的),例如:

class textbook

;當const和non_const成員函式有著等價定義時,使用non_const可以避免**重複(即利用轉型)

const int& dosomething(const int& number)

int& dosomething(int& number)

確定物件被使用前已先被初始化

注意建構函式初始化和賦值的區別:

class object

~object();

};

成員變數有著固定的初始化次序,總是以宣告的順序被初始化。

如果物件a必須在物件b之前先初始化,而a初始化的成功受制於b是否已經初始化,這時可以採用local static 代替non_local static,即用乙個自己的專屬函式,返回本身的引用,而此時,建構函式已經被呼叫過了,所以不會出現沒有初始化的災情了。

Effective C 閱讀筆記(1)

關鍵字 explicit 用於告知編譯器,該建構函式可以用於完成隱式型別轉換 implicit type conversation 建議 除非有乙個很好的理由,否則將建構函式申明為 explicit!c 是乙個由多個次語言組成的語言聯邦 c 風格 物件導向的c 泛型c stl c 不同的次語言尤其各...

《effective c 》閱讀筆記 1

之前閱讀一部分 effective c 作為一本被眾多讀者所推薦的書自然有它的獨特的魅力所在。在 過一部分該書的一部分內容之後,不由的覺得該書確實是集c 精華於一身,同時還加以科普了很多相對來說在一般老式課本難以見到的語法和語句,如智慧型指標等用法,並舉出例項將該其與其他語法相對而言的優點凸顯出來。...

effective C 閱讀筆記 2

條款26 盡可能的延後變數定義式出現的時間 盡可能後的定量定義式不僅能夠避免構造非必要物件,還可以避免無意義的預設構造行為,更深層次的說,以具明顯意義之初值將變數初始化,還可以附帶說明變數的目的。條款27 盡量少做轉型動作 c 中的四種新式轉型 const cast expression 去除con...