1.条款04:确定对象被使用前已先被初始化
这是一个比较好理解的条款,从刚学习C语言开始,这样的问题就一直伴随至今。
1.1 内置类型的初始化
对于int
、double
这样的内置类型,需要手动初始化,比如说:
int x= 0;
const char* text="A C-style string";
double d;
cin >> d;//以输入流的方式初始化
未初始化变量的错误,已经很少犯了,毕竟已经身经百战。
1.2构造函数初始化
这里纠正了我以前的误解,那就是但凡是在构造函数中做的事情就是初始化,然而,书中指出,带参数的构造函数使用成员初值列表
的做法可谓之初始化,初始化的顺序则是以成员初值列中的次序为标准(即使声明顺序不一样),而在函数体中的赋值操作,只能算作赋值:
class A
{
private:
int a;
public:
A(int value):a(value){}//这是初始化
};
//***************
class A
{
private:
int a;
public:
A(int value){a=value;}//这是赋值
};
其实两者效果没差,不过初始化的结果通常是效率更高。
对于默认构造函数来说,依然是使用成员初值列表的方式,让需要初始化的成员去调用各自的默认构造函数,例如: