[英]Value initialization of nested structs does not work properly
我有这个结构定义:
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 错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.