C++11 的统一初始化是否包含到数组的隐式类型转换?
Does C++11's unified initialize contains an implicit type conversion to array?
auto buf={1,2,3}
这里"buf"的类型是std::initializer_list,但是
int buf[]={1,2,3};
左边是变量声明"buf",类型是int[],右边是std::initializer_list
那么这里有没有隐式类型转换,从std::initializer_list到int[]?或者新的STL定义了这样的转换?
如何证明这里有或没有这样的转换?
在 auto buf = {1, 2, 3};
的情况下,编译器必须推断 buf
是什么类型并选择 std::initializer_list<int>
。
然而在 int buf[] = {1, 2, 3};
的情况下,它知道 buf
的类型并且初始化它的唯一方法是通过聚合初始化。另请注意,未指定大小,而是根据提供的元素数推导出来的。这是数组所独有的。
这里没有可用的转换。如果您尝试从 std::initializer_list<int>
强制构造,您会收到编译错误:
main.cpp:8:9: error: array initializer must be an initializer list
int buf[] = std::initializer_list<int>({1, 3, 4});
^
auto buf={1,2,3}
这里"buf"的类型是std::initializer_list,但是
int buf[]={1,2,3};
左边是变量声明"buf",类型是int[],右边是std::initializer_list
那么这里有没有隐式类型转换,从std::initializer_list到int[]?或者新的STL定义了这样的转换?
如何证明这里有或没有这样的转换?
在 auto buf = {1, 2, 3};
的情况下,编译器必须推断 buf
是什么类型并选择 std::initializer_list<int>
。
然而在 int buf[] = {1, 2, 3};
的情况下,它知道 buf
的类型并且初始化它的唯一方法是通过聚合初始化。另请注意,未指定大小,而是根据提供的元素数推导出来的。这是数组所独有的。
这里没有可用的转换。如果您尝试从 std::initializer_list<int>
强制构造,您会收到编译错误:
main.cpp:8:9: error: array initializer must be an initializer list
int buf[] = std::initializer_list<int>({1, 3, 4});
^