初始化列表的作用

我纠结的问题都在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<
也就是说,a和b的值分别是多少?

1
-858993461

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

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

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


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



你可能感兴趣的:(C++)