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

Value initialization of nested structs does not work properly

本文关键字:常工作 工作 结构 初始化 嵌套      更新时间:2023-10-16

我有这个结构定义:

struct inner
{
    int i;
    std::string str;
};
struct outer
{
    inner member[32];
};

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

outer o = {};

对于GCC,这很好:所有inner.i都为零,所有inner.str都为空。但在VS2013上,只有inner.str是空的;所有CCD_ 5都包含垃圾,即未正确初始化。

在没有std::string成员的情况下,inner.i的零初始化与VS2013一起工作。

标准对此有何规定?我一直假设{}初始化所有内容,要么通过清零,要么通过调用默认构造函数。我错了吗?还是这是VS2013中一个非常糟糕的错误?

这只是聚合初始化:

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

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

是的,这是一个VS2013错误。