【发布时间】:2019-12-20 13:30:12
【问题描述】:
考虑以下代码sn-p:
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初始化。
代码prints20 10。
即,j 在计算 i 时被认为是 0。
标准是否保证在这种情况下使用内置类型的默认值?还是只是垃圾值恰好是0?还是未定义的行为?
【问题讨论】:
-
"或者只是垃圾值恰好是0?" - 可能在超过 90% 的情况下(当然仍然是 UB)。
-
还是未定义的行为? 是的。
-
这应该回答你的问题:stackoverflow.com/a/6032889/5728381
标签: c++ constructor initializer-list