c++ 初始化参数列表顺序

简单的一个类

class A

{

int j, i;

public:

  A(int x) : i(x), j(i) {}

}

如果如下定义

A a(10);

i,j的值分别是多少呢,都是10吗,实际上 i == 10, j 是一个随机数。为什么呢?难道不是从左到右初始化吗?修改如下

  A(int) : i(j), j(x) {}

结果果然都是10了。难道是从右到左?再次修改

int i, j;

结果 j == 10, i 是一个随机数。迷惑了?或者你猜到了,初始化的顺序与初始化列表的顺序无关,而是类中声明的顺序。被骗了吧。

为什么是这样子呢,找了一下原因。析构的时候,与初始化相反的顺序进行,如果按初始化列表的顺序初始化,就要额外维护初始化列表的顺序,所以干脆都按声明的顺序来。

初始化列表不可缺少的原因,引用和常量必须在初始化列表里初始化。

初始化列表的优势直接构造不用赋值性能优势。

总结:不要被初始化列表的顺序迷惑,按声明的顺序初始化,最好按声明的顺序写初始化列表。

  

posted @ 2012-11-17 23:22  国超  阅读(901)  评论(0编辑  收藏  举报