繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM