考虑以下代码片段:
class A
{
public:
A(int a,int b) : j(a),i(j + b) {}
int i,j;
};
int main()
{
A a(10,20);
std::cout << a.i << " " << a.j << std::endl;
return 0;
}
标准says,成员变量的初始化顺序是声明它们的顺序。在这种情况下,i
将在j
之前初始化。由于j
尚未初始化,请先i = *a garbage value* + 20
,然后再用j
初始化10
。
代码prints 20 10
。
即,j
在计算0
时被认为是i
。
在这种情况下,标准保证是否对内置类型使用默认值?还是仅仅是垃圾值恰好是0
?还是未定义的行为?