初始化具有默认值的结构体结构是简单的:括号(集合)初始化为具有默认值
struct X { int a; int b = 2; };
和初始化用支架初始化一个结构是微不足道的太:
X x = {1, 3};
令人惊奇的init代码不会编译,直到我删除默认值。那么,我如何在这种情况下做init?我想让X POD没有C-tor。
初始化具有默认值的结构体结构是简单的:括号(集合)初始化为具有默认值
struct X { int a; int b = 2; };
和初始化用支架初始化一个结构是微不足道的太:
X x = {1, 3};
令人惊奇的init代码不会编译,直到我删除默认值。那么,我如何在这种情况下做init?我想让X POD没有C-tor。
下面是一些与问题相关的文档:
http://en.cppreference.com/w/cpp/language/aggregate_initialization
在C++ 11中添加一个默认的初始化可以防止braced init有效。在C++ 14中,它没有。
在C++ 11中解决您的问题的一种方法是编写一个构造函数,其中a和b的值为默认值。
只是FYI:与C++ 14,代码编译。 – Mine
记录在这里:http://en.cppreference.com/w/cpp/language/aggregate_initialization – Hayt
'聚合的定义被改为显式排除任何具有成员初始值的类;因此,他们不允许使用聚合初始化。 C++ 14放宽了此限制,允许在这些类型上进行聚合初始化。如果加载的初始化列表没有为该参数提供一个值,那么成员初始化程序就会处理它,所以基本上,如果没有C-tor,C++ 11中不可能存在代码。只有C++ 14 –