对具有结构内初始化成员的结构进行统一初始化

uniform initialization on struct with in-struct initialised members

本文关键字:结构 初始化 成员      更新时间:2023-10-16

在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};
}

似乎在结构初始化中抑制了初始化器列表结构构造函数的生成。为什么?

因为您是在C++11下编译的,它根据构造函数定义了默认的成员初始值设定项。也就是说,它们隐式地创建了一个构造函数。因此,该类型不再是一个集合。

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