#include <iostream>
using namespace std;
class A
{
private:
int n1;
int n2;
public:
A() : n2(0), n1(n2 + 2)
{}
void Print()
{
cout << "n1: " << n1 << "n2: " << n2;
}
};
int main()
{
A a;
a.Print();
return 0;
}
上面这段代码输出的n1, n2分别是多少,很多估计都会说n1 = 2, n2 = 0;但真的是这样吗?
实际上,构造函数的初始化列表是在C++中经常使用的一个概念。在C++中,成员变量的初始化顺序只与它们在类中声明的顺序有关,而与在初始化列表中的顺序无关。在前面的问题中,n1先与n2被声明,因此n1也会在n2之前被初始化,所以我们先会用n2+2去初始化n1。由于n2这个时候还没有被初始化,因此它的值是随机的。用此时的n2加上2去初始化n1,n1的值只是一个随机值。接下来再用0初始化n2,因此最终n2的值是0。