初始化列表的作用

来源:互联网 发布:java开发接私活 编辑:程序博客网 时间:2024/05/17 06:01

我纠结的问题都在primer上有很好的解答


之前突然想到,为什么要存在冒号这种初始化方法,在google被墙,没办法只能求助于度娘。。。


冒号这种初始化方法,也叫做,初始化列表,也就是变量初始化的时候调用的

意味着,在一个类当中,一个成员变量只能在初始化赋值。

比如: const, 比如引用&。


举个例子:

class A{public:   A(i)   {        a = i;        b = i;        c = i;   }private:   int a;   const int b;   int &c;};

这样是不合法的, 因为b, c只能在初始化时赋值。


所以,只能如此初始化:

class A{public:   A(int i):a(i), b(i), c(i){}private:   int a;   const int b;   int &c;};


还有一个比较重要的问题,就是初始化列表的初始化顺序是怎样的?

class A{public:A():b(a-1), a(b-1){cout<<b<<endl;cout<<a<<endl;};private:int a;int b;};
也就是说,a和b的值分别是多少?

1
-858993461

答案就是,初始化列表里的顺序,与初始化顺序无关

这里首先定义的是a,所以a先初始化为b - 1即 -858993460 - 1,-858993461

而b是第二个定义的,所以后初始化b为a- 1即-858993461,为-858993462


如果,没有必要的情况下,还是少用初始化列表,尽量在构造函数中顺序的定义。



0 0
原创粉丝点击