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