嵌套结构的值初始化不能正常工作
我有这个结构定义:
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