声明:
- 文中内容收集整理自《Effective C++(中文版)第三版》,版权归原书所有。
- 本内容在作者现有能力的基础上有所删减,另加入部分作者自己的理解,有纰漏之处敬请指正。
目录
1. 术语
声明和定义
1.声明式:是告诉编译器某个东西的名称和类型,而略去细节。
2.定义式:是编译器为对象(内置类型也看做对象)拨发内存的地点。
- 若只声明一个变量而不定义,则需要在前面加一个extern修饰符
int x; //定义式
extern int y; //声明式
初始化
1.初始化是给予对象初值的过程。用户自定义类型的对象初始化由构造函数执行。
- default构造函数:要不没有参数,要不所有的参数都有缺省值
- 构造函数的显式类型转换和隐式类型转换
class B
{
public:
explicit B(int x){} //显式构造函数
};
void doSomething(B bObject); //函数,接收一个类型为B的对象
B bObj1; //定义一个类型为B的对象
doSomething(bObj1); //正确
doSomething(28); //错误,doSomeething只接受一个类型为B的参数,而int与B不可以隐式类型转换
doSomething(B(28)); //正确,B构造函数将int显式转换为B类型供调用
- 构造函数默认声明为implicit
- 声明为explicit的构造函数往往更受欢迎,因为它可以禁止编译器执行非预期的类型转换
2.copy构造函数和copy操作符
- copy构造函数被用来“以同类型初始化自我对象”。
- copy赋值操作符被用来“从另一同类型对象中拷贝其值到自我对象”。
- 一个语句中如果有新对象被定义,那么一定会有一个构造函数被调用。
class Widget
{
public:
Widget(); //默认构造函数
Widget(const Widget&); //拷贝构造函数
Widget& operator=(const Widget&); //拷贝赋值运算符
};
Widget w1; //调用默认构造函数
Widget w2(w1); //调用拷贝构造函数
Widget w3 = w2; //调用拷贝构造函数,并不一定有“=”就一定是拷贝赋值运算符
值传递和const引用传递
值传递往往是不好的选择,const引用传递往往是比较好的选择。
2.命名习惯
- 二元操作符两个常用的参数名称:lhs和rhs。
- 对于成员函数,左侧实参由this指针表现出来,所有有时候会单独使用右参数名rhs。
- “指向类型为T的对象”的指针命名为:pt,意思是“point to T”。
3.关于线程
了解
4.TR1和Boost
了解