《Effective C++:改善程序與設(shè)計的55個具體方法》
Scott Meyers 著,侯捷 譯
做個筆記幫助學(xué)習(xí)、理解和記憶,嗯。
0 導(dǎo)讀
聲明式 (declaration):告訴編譯器某個東西的名稱和類型(type),但略去細(xì)節(jié)。
簽名式 (signature):函數(shù)的參數(shù)和返回類型。一個函數(shù)的簽名等同于該函數(shù)的類型。
定義式 (definition):提供編譯器一些聲明式所遺漏的細(xì)節(jié)。
初始化 (initialization):“給予對象初值”的過程。對用戶自定義類型的對象而言,初始化由構(gòu)造函數(shù)執(zhí)行。
default構(gòu)造函數(shù):一個可被調(diào)用而不帶任何實參的構(gòu)造函數(shù)。這樣的構(gòu)造函數(shù)要么沒有初值,要么就是每個參數(shù)都有缺省值。
explicit構(gòu)造函數(shù):可阻止它們被用來進(jìn)行隱式類型轉(zhuǎn)換,但仍可被用來進(jìn)行顯示類型轉(zhuǎn)換。explicit構(gòu)造函數(shù)通常比non-explicit構(gòu)造函數(shù)更受歡迎,因為它們禁止編譯器執(zhí)行非預(yù)期的類型轉(zhuǎn)換。除非需要允許構(gòu)造函數(shù)被用于隱式類型轉(zhuǎn)換,否則建議聲明為explicit。
copy構(gòu)造函數(shù):被用來“以同型對象初始化自我對象”,copy assignment(copy 賦值)操作符被用來“從另一個同型對象中拷貝其值到自我對象”。
class Widget{
public:
Widget(); // default構(gòu)造函數(shù)
Widget(const Widget& rhs); // copy構(gòu)造函數(shù)
Widget& operator=(const Widget& rhs); // copy assignment操作符 (重載=運(yùn)算符)
... ...
};
Widget w1; // 調(diào)用default構(gòu)造函數(shù)
Widget w2(w1); // 調(diào)用copy構(gòu)造函數(shù)
w1 = w2; // 調(diào)用copy assignment操作符
注意:“=”語法也可用來調(diào)用copy構(gòu)造函數(shù)。
Widget w3 = w2; // 調(diào)用copy構(gòu)造函數(shù)
如果一個新對象被定義,一定會調(diào)用構(gòu)造函數(shù),如果沒有新對象被定義,就是賦值操作被調(diào)用。copy構(gòu)造函數(shù)定義一個對象如何passed by value(以值傳遞)。passed by value意味著“調(diào)用copy構(gòu)造函數(shù)”。
STL:標(biāo)準(zhǔn)模板庫(Standard Template Library),是C++標(biāo)準(zhǔn)程序庫的一部分,致力于容器(如vector, list, set, map等), 迭代器(如vector<int>::iterator, set<string>::iterator等),算法(如for_each, find, sort等)及相關(guān)機(jī)能。
函數(shù)對象 (function objects):行為像函數(shù)的對象,這樣的對象來自于重載operator()(function call 操作符)的classes。
作者在程序批注中提到構(gòu)造函數(shù)和析構(gòu)函數(shù)時,有時會使用縮寫字 ctor 和 dtor 。