在 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/