嵌套结构的值初始化无法正常工作

时间:2015-11-20 10:50:46

标签: c++ visual-studio c++11 visual-studio-2013 initialization

我有这个结构定义:

struct inner
{
    int i;
    std::string str;
};

struct outer
{
    inner member[32];
};

现在我想创建一个outer的值初始化实例,所以我写了

outer o = {};

使用GCC,这很好用:所有inner.i都归零,所有inner.str都为空。但是在VS2013上,只有inner.str为空;所有inner.i都包含垃圾,但没有正确初始化。

如果没有std::string成员,inner.i的零初始化将与VS2013一起使用。

标准对此有何评价?我总是假设{}通过归零或调用默认构造函数来初始化所有内容。我错了还是VS2013中的一个非常糟糕的错误?

1 个答案:

答案 0 :(得分:2)

这只是aggregate initialization

  

如果初始化程序子句的数量小于成员数或初始化程序列表完全为空,则其余成员由其默认初始化程序初始化(如果在类定义中提供),否则(从C ++开始) 14)通过空列表执行值初始化。

值初始化意味着member的每个元素都是值初始化的,这反过来意味着i应该为零。

是的,这是一个VS2013错误。