虽然简单,再复习复习,哈~ 成员初始化列表与其他初始化的不同
1) 和 2) 两种初始化方式有什么不一样呢? 看一下编译器层次上,他们可能的伪代码就清楚了:
显然,第一种情况要比第二好多了,因为第二个加上了一个临时对象的初始化和销毁开销,而如果这两个开销比较大的时候,就会影响程序性能了J。 成员初始化列表的执行顺序 光注意到好处还不行,问题还是存在的。看下面的代码:
好象很理所当然的写法……,但是实际上存在错误? 因为成员初始化列表的执行顺序是右优先级的,如同运算符,参数传递一样,知道是右优先级了那上面的代码当然是错的了……J (不知道是否所有的编译器都是右优先级,既然不知道,恩,就要避免这么写贝@#%^%)。 成员初始化列表与其他初始化的执行顺序 看到上面的错误,可能又会想到另外一个‘错误’。
上面的代码会有问题吗——究竟是 data(int) 先执行还是 data_img=data先执行呢? 答案是前者。 成员列表的初始化代码会被编译器插入到构造函数的user-code 之前。(好象所有编译器私底下增加的都在user-code 之前吧)J 何时必须使用成员初始化 1 const 数据成员 2 成员对象的带参数初始化 3 base-class 带参数初始化 4 引用变量的初始化
|