Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 嵌套结构的值初始化工作不正常_C++_Visual Studio_C++11_Visual Studio 2013_Initialization - Fatal编程技术网

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

C++ 嵌套结构的值初始化工作不正常,c++,visual-studio,c++11,visual-studio-2013,initialization,C++,Visual Studio,C++11,Visual Studio 2013,Initialization,我有以下结构定义: struct inner { int i; std::string str; }; struct outer { inner member[32]; }; 现在我想创建outer的值初始化实例,所以我写 outer o = {}; 对于GCC,这很好:所有internal.i都归零,所有internal.str都为空。但在VS2013上,只有内部.str为空;所有内部.i都包含垃圾,即未正确初始化 如果没有std::string成员,则inter

我有以下结构定义:

struct inner
{
    int i;
    std::string str;
};

struct outer
{
    inner member[32];
};
现在我想创建
outer
的值初始化实例,所以我写

outer o = {};
对于GCC,这很好:所有
internal.i
都归零,所有
internal.str
都为空。但在VS2013上,只有
内部.str
为空;所有
内部.i
都包含垃圾,即未正确初始化

如果没有
std::string
成员,则
internal.i
的零初始化可用于VS2013

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

这只是:

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

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


是的,这是一个VS2013错误。

将是一个相当严重的错误,对吗?初始化东西并不是一个奇特的用例。那个编译器在他们声称支持的新特性中经常有相当严重的错误。他们仍然没有像样的变量模板,即使他们声称连续支持三个主要版本。