使用结构内初始化成员对struct进行统一初始化

时间:2016-07-18 19:11:58

标签: c++ c++11

包含结构内初始化成员的结构实例的统一初始化跟随我在Apple LLVM版本7.3.0上出现以下错误:

error: no matching constructor for initialization of 'Foo'

以下是代码示例:

struct Foo
{
    int foo1 = 0;
    int foo2;
};


int main()
{
    Foo foo{0, 1};
}

似乎in-struct初始化会抑制初始化列表结构构造函数的生成。为什么呢?

1 个答案:

答案 0 :(得分:5)

因为你是在C ++ 11下编译的,C ++ 11在构造函数方面定义了default member initializers。也就是说,它们隐式地创建了一个构造函数。因此,类型不再是聚合。

C ++ 14取消了这一点,允许聚合具有默认成员初始值设定项。如果聚合提供替代方法,聚合将覆盖默认成员初始化程序。