隐式生成的初始化列表构造函数

Hra*_*ant 1 c++ constructor c++11

在C++标准中std::array它说:

数组是可以使用语法初始化的聚合(8.5.1)

array a = {initializer-list};

其中initializer-list是一个逗号分隔的列表,最多包含N个元素,其类型可转换为T.

它还说它std::array是一个聚合类型,它的构造函数是隐式生成的.

std::array使用初始化列表初始化a ,它必须有一个构造函数std::initializer_list作为参数.

是一个构造函数,它std::initializer_list也为用户定义的类型隐式生成,或者特定于std::array

Bau*_*gen 5

不,编译器并不能生成一个构造器服用std::initializer_list,既不支持std::array也不对任何其他聚合类型.

你在这里观察到的是与初始无关的聚合初始化std::initializer_list.

您提供的标准代码段中的术语"初始化程序列表"是指初始化程序列表,它们与此无关std::initializer_list.

您可以使用以下内容进行测试:

struct A {
    int i;
    std::string str;
};

int main() {
    A a{1, "asdf"};
}
Run Code Online (Sandbox Code Playgroud)

这工作,但显然没有充分利用std::initializer_list,因为这只能处理一个单一的一次性类型.