【发布时间】:2012-12-03 22:48:30
【问题描述】:
C++11 标准 8.5.4.3 说:
“如果初始化列表没有元素并且 T 是具有默认构造函数的类类型,则该对象是值初始化的。”
struct A
{
int get() { return i; }
private:
int i;
};
int main()
{
A a = {};
int n = a.get();
cout << n << endl;
// n is a random number rather than 0
return 0;
}
这是 VC++ 的错误吗?我的 VC++ 是 2012 年 11 月最新的 CTP。
【问题讨论】:
-
编译器优化不应破坏 C++ 标准的规定。所以我认为这与优化无关。
-
@KillianDS,请查看我修改后的帖子
-
加上
std::cout << n << std::endl;会打印什么? -
打印出 0xCCCCCCCC。
-
我在 g++ 4.6.3 中得到了类似的行为,但据我所知,这种行为是错误的。您遇到的情况似乎是第 8.5.7 节的第二种情况,这表明会发生零初始化。
标签: c++ c++11 initialization aggregate initializer-list