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

Mik*_*hke 30 c++ c++11

使用默认值初始化结构是微不足道的:

struct X { int a; int b = 2; };
Run Code Online (Sandbox Code Playgroud)

并使用大括号初始化程序初始化一个结构也是微不足道的:

X x = {1, 3};
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,在我删除默认值之前,init代码将无法编译.那么,在这种情况下我怎么做init呢?我想保持X没有c-tor的POD.

Hay*_*ayt 26

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

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

您的代码无效.在它再次有效.

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

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