0 導(dǎo)讀
- 1、size_t只是unsigned int 的typedef。
- 2、每個(gè)函數(shù)的聲明揭示其簽名式,也就是參數(shù)和返回類型。C++對(duì)簽名式的官方定義不包括函數(shù)的返回類型。
- 3、explicit阻止隱式類型轉(zhuǎn)換,但仍可以顯示類型轉(zhuǎn)換。
- 4、除非有更好的理由允許構(gòu)造函數(shù)被用于隱式類型轉(zhuǎn)換,否則要將其聲明為explicit。
- 5、參數(shù)命名:right-hand-side:rhs ,left-hand-side:lhs,指針帶p,類的首字母大寫。
- 6、TR1(technical report 1)是一份規(guī)范,描述加入C++標(biāo)準(zhǔn)庫(kù)的諸多新機(jī)能。
- 7、Boost是一個(gè)組織,也是一個(gè)網(wǎng)站,提供可移植、同僚復(fù)審、源代碼開(kāi)放的C++程序庫(kù)。
條款01: 視C++為一個(gè)語(yǔ)言聯(lián)邦
- 1、C++是一個(gè)多重規(guī)范編程語(yǔ)言,同時(shí)支持過(guò)程形式,面向?qū)ο笮问剑瘮?shù)形式,泛型形式、元編程形式的語(yǔ)言。
- 2、將C++視為一個(gè)由相關(guān)語(yǔ)言組成的聯(lián)邦而非單一語(yǔ)言。在某個(gè)次語(yǔ)言中,各種守則與通例都傾向簡(jiǎn)單、直觀易懂、并且容易記住。然而,將一個(gè)次語(yǔ)言移到另一個(gè)次語(yǔ)言中,守則可能改變。
- 3、(例如)對(duì)于內(nèi)置C-like類型而言,pass-by-value比pass-by-reference高效,但從C part of C++移到object-oriented c++,由于用戶自定義構(gòu)造函數(shù)和析構(gòu)函數(shù)的存在,pass-by-reference-to-const往往更好。運(yùn)用template C++時(shí)尤其如此。但是一旦進(jìn)入STL,由于迭代器和函數(shù)對(duì)象都是在C指針上塑造出來(lái)的,舊式的pass-by-value守則再次適用。
條款02:盡量以const,enum,inline替換#define
- 1、define未進(jìn)入記號(hào)表,而引起調(diào)試追蹤不變,對(duì)于單純變量,最好以const對(duì)象或enum替換define,寧可以編譯器替代預(yù)處理器來(lái)檢測(cè)錯(cuò)誤。
- 2、enum hack:一個(gè)屬于枚舉類型的值,可權(quán)充ints被使用。它的行為比較像define,不像const,例如無(wú)法獲取一個(gè)enum的地址。如果,你不想讓別人獲取一個(gè)指針或引用指向你的某個(gè)整數(shù)常量,enum可以幫助你實(shí)現(xiàn)這個(gè)約束。enum hack同時(shí)也是模板元編程的基礎(chǔ)技術(shù)。
- 3、對(duì)于形似函數(shù)的宏,最好改用inline函數(shù)替換define
條款03 盡可能使用const
- 1、將某些東西聲明為const可以幫助編譯器檢測(cè)出錯(cuò)誤用法。它可被施加于任何作用域內(nèi)的對(duì)象,函數(shù)參數(shù),函數(shù)返回類型、成員函數(shù)本體等。
- 2、使用const還可避免無(wú)端地與內(nèi)置類型不兼容,容易理解,可操作const對(duì)象
- 3、通過(guò)重載[],可達(dá)到const/ non-const返回自定義類型一樣的效果。
- 4、用mutable修飾成員變量后,在const函數(shù)內(nèi)也可以被更改
- 5、當(dāng)const和non-const成員函數(shù)有著實(shí)質(zhì)等價(jià)的實(shí)現(xiàn)時(shí),另non-const版本調(diào)用const版本可避免代碼重復(fù)
條款04 確定對(duì)象被使用前已經(jīng)被初始化
- 1、static對(duì)象會(huì)在main結(jié)束后。自動(dòng)調(diào)用析構(gòu)函數(shù)
- 2、為內(nèi)置對(duì)象進(jìn)行手工初始化,因?yàn)镃++不保證初始化它們
- 3、構(gòu)造函數(shù)最好使用成員函數(shù)初值列表,而不在函數(shù)體內(nèi)對(duì)其賦值。初值列出的成員變量初始化順利,與其在類中聲明順序一致。
- 4、 為避免跨編譯單元的初始化次序問(wèn)題,請(qǐng)以local-static對(duì)象替換non-local的static對(duì)象。采用類似單利模式的方式返回reference-to-local-static可以保證在調(diào)用時(shí),reference指向?qū)ο笠殉跏蓟?/li>
條款05
- 1、編譯器可以暗自為class創(chuàng)建default構(gòu)造函數(shù),copy構(gòu)造函數(shù),copy assignment操作符,以及析構(gòu)函數(shù)。
- 2、C++拒絕編譯內(nèi)含引用的賦值操作。必須自己定義一個(gè)拷貝賦值函數(shù)。
- 3、析構(gòu)函數(shù)是否virtual取決于基類(如果存在),是否為虛析構(gòu)。