一 View C++ as a federation of languagec++
c++ 能夠當作4部分組成:多線程
-
- c
- Object-Oriented c++
- Template c++
- STL
二 Perfer consts, enums, inlines to #defines函數
- *左表示所指不能改變,*右則表示指針不能改變
- 類中的專屬常量(static const)爲了只有一份拷貝一般加static,所以須要類外增長一個定義式(類中是申明)
- 類中的常量也能夠用 the enum hack 的方法定義
- template inline函數能夠替換宏函數
三 Use const whenever possiblethis
- passed by pointer-to-const passed by reference-to-const
- bitwise constness 和 logical constness(const成員函數)
- 前者要求函數內部不能改變類對象,後者要求使用該類的人感覺不到其改變了類對象(mutable私有變量)
- 提供成員函數的const,non-const版本爲避免代碼重複,能夠用non-const調用const成員函數的方法(static_cast,const_cast)
- 注意const成員函數返回值是否須要爲const
四 Make sure that objects are initialized before they're used線程
- 構造函數使用成員參數列表初始化變量(對於類中存在const,引用時必須如此)
- 將non-local static 變成 local static 對象(經過專屬factory函數),能夠避免糾結多個不一樣類對象之間不明確的初始化順序,由於它會在使用時初始化
- 對於多線程,爲了消除與初始化的競爭關係,能夠在啓動多線程前把全部reference-returning
五 Know what functions C++ silently writes and calls指針
- copy constructor, copy assignment, destructor
- 類成員有const/reference,default copy constructor 會編譯出錯
六 Explicitly disallow the use of compiler-generated functions you don't want對象
- 方法一:直接放到private中,缺點是多是link的時候報錯
- 方法二:申明一個基類,函數放在private裏(不用實現)
七 Declare destructors virtual in polymorphic base calssesci
- pure virtual
- 能夠防止只析構了 base class 部分
- 若是不是做爲base class 使用或者不是爲了具備多態性,請勿申明virtual,會增長體積
八 Prevent exceptions from leaving destructors(wait,cannot understand now)it
九 Never call virtual functions during construction or destructionio
- 這樣調用的不是派生類的virtual函數
十 Have assignment operators return a reference to *this
- 便於寫成連鎖形式