嵌套结构的值初始化不能正常工作

我有这个结构定义:

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中的一个非常糟糕的错误?


这只是聚合初始化:

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

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

所以是的,这是一个VS2013错误。

链接地址: http://www.djcxy.com/p/67791.html

上一篇: Value initialization of nested structs does not work properly

下一篇: Default initialization of std::array?