使用默认值初始化结构体是微不足道的:
struct X { int a; int b = 2; };
并且使用大括号初始化结构体也很简单:
X x = {1, 3};
令人惊讶的是,初始化代码在删除默认值之前无法编译。那么,在这种情况下,我该如何进行初始化? 我希望保持X作为一个没有构造函数的POD。
使用默认值初始化结构体是微不足道的:
struct X { int a; int b = 2; };
并且使用大括号初始化结构体也很简单:
X x = {1, 3};
令人惊讶的是,初始化代码在删除默认值之前无法编译。那么,在这种情况下,我该如何进行初始化? 我希望保持X作为一个没有构造函数的POD。
http://en.cppreference.com/w/cpp/language/aggregate_initialization
在c++11中,你的代码是无效的。在c++14中,它又变得有效了。
在C++11中,添加默认初始化会防止花括号初始化变为有效。在C++14中,则不会。
解决C++11中问题的方法是编写一个构造函数,其中a的值和b的值有一个默认值。