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});
        ^