class A
{
private:
int n1;//先声明
int n2;//后声明
public:
A():n2(0), n1(n2+2)
{}
void print()
{
std::cout <<"n1: " << n1 << ", n2: " << n2 << endl;
}
};
n1 n2的值分别是多少?为什么?
执行 构造函数时,成员变量的初始化顺序是由它们在类中的声明顺序决定的,而不是由初始化列表中的书写顺序决定的。
A() 构造函数的初始化顺序是:
n1(n2+2)→ 此时n2还未初始化(值是未定义的,可能是任意值)n2(0)
所以:
n1的值是未定义的(可能是垃圾值),因为它在n2初始化之前使用了n2的值。n2的值是0。
如果你运行这段代码,print() 输出的 n1 很可能是一个不可预测的数,而 n2 会是 0。

被折叠的 条评论
为什么被折叠?



