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

标签 c++ c++11 constructor

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

An array is an aggregate (8.5.1) that can be initialized with the syntax

array a = { initializer-list };

where initializer-list is a comma-separated list of up to N elements whose types are convertible to T.

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

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

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

最佳答案

不,编译器不会生成采用std::initializer_list 的构造函数,既不为std::array 也不为任何其他聚合类型。

你在这里观察到的是aggregate initialization这与 std::initializer_list 完全无关。

您提供的标准代码段中的术语“initializer-list”指的是初始化器列表,这又与 std::initializer_list 无关。

你可以用这样的东西来测试它:

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

int main() {
    A a{1, "asdf"};
}

这行得通,但显然没有使用 std::initializer_list,因为它一次只能处理一个类型。

关于c++ - 隐式生成的初始化列表构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32521974/

相关文章:

C++ "iter =++iter"是做什么的?有效吗?

c++ - 如何从 Memory OutputStream 访问数据

java - 如何使用泛型类中的类类型对象作为参数? - 泛型和反射相结合

java - 使用 "this"和 "super"调用构造函数

xslt - XSLT 2.0 中的序列构造函数是什么?

java - 从 JNI 到 Java 的字符 vector

c++ - VTK:直到用户交互后 View 才会更新

c++ - 在不使用 boost::any 的情况下将参数存储在可变参数模板函数中

c++ - 大小为 10 的 vector 的测试用例失败

c++ - std::minmax initializer_list<T> 参数