《Effective C++:改善程序与设计的55个具体方法》
Scott Meyers 著,侯捷 译
做个笔记帮助学习、理解和记忆,嗯。
0 导读
声明式 (declaration):告诉编译器某个东西的名称和类型(type),但略去细节。
签名式 (signature):函数的参数和返回类型。一个函数的签名等同于该函数的类型。
定义式 (definition):提供编译器一些声明式所遗漏的细节。
初始化 (initialization):“给予对象初值”的过程。对用户自定义类型的对象而言,初始化由构造函数执行。
default构造函数:一个可被调用而不带任何实参的构造函数。这样的构造函数要么没有初值,要么就是每个参数都有缺省值。
explicit构造函数:可阻止它们被用来进行隐式类型转换,但仍可被用来进行显示类型转换。explicit构造函数通常比non-explicit构造函数更受欢迎,因为它们禁止编译器执行非预期的类型转换。除非需要允许构造函数被用于隐式类型转换,否则建议声明为explicit。
copy构造函数:被用来“以同型对象初始化自我对象”,copy assignment(copy 赋值)操作符被用来“从另一个同型对象中拷贝其值到自我对象”。
class Widget{
public:
Widget(); // default构造函数
Widget(const Widget& rhs); // copy构造函数
Widget& operator=(const Widget& rhs); // copy assignment操作符 (重载=运算符)
... ...
};
Widget w1; // 调用default构造函数
Widget w2(w1); // 调用copy构造函数
w1 = w2; // 调用copy assignment操作符
注意:“=”语法也可用来调用copy构造函数。
Widget w3 = w2; // 调用copy构造函数
如果一个新对象被定义,一定会调用构造函数,如果没有新对象被定义,就是赋值操作被调用。copy构造函数定义一个对象如何passed by value(以值传递)。passed by value意味着“调用copy构造函数”。
STL:标准模板库(Standard Template Library),是C++标准程序库的一部分,致力于容器(如vector, list, set, map等), 迭代器(如vector<int>::iterator, set<string>::iterator等),算法(如for_each, find, sort等)及相关机能。
函数对象 (function objects):行为像函数的对象,这样的对象来自于重载operator()(function call 操作符)的classes。
作者在程序批注中提到构造函数和析构函数时,有时会使用缩写字 ctor 和 dtor 。