具有默认值的结构的Brace(聚合)初始化

时间:2016-09-06 08:42:33

标签: c++ c++11

使用默认值初始化结构很简单:

struct X { int a; int b = 2; };

并使用大括号初始化程序初始化结构也很简单:

X x = {1, 3};

令人惊讶的是,init代码不会编译,直到我删除默认值。那么,在这种情况下我怎么做init呢?我想在不使用电脑的情况下保持X POD。

1 个答案:

答案 0 :(得分:22)

以下是与此问题相关的一些文档:

http://en.cppreference.com/w/cpp/language/aggregate_initialization

中,您的代码无效。在中,它再次有效。

在C ++ 11中添加默认初始化会阻止braced init生效。在C ++ 14中,它没有。

在C ++ 11中解决问题的一种方法是编写一个构造函数,其值为a,b值为默认值。