【发布时间】:2016-10-06 18:05:14
【问题描述】:
auto buf={1,2,3}
这里“buf”的类型是std::initializer_list,但是
int buf[]={1,2,3};
左边的表达式是变量“buf”的声明,类型为int[],右边是std::initializer_list
那么这里有隐式类型转换,从 std::initializer_list 到 int[]?还是新的 STL 定义了这样的转换?
如何证明这里有没有这样的转换?
【问题讨论】:
-
语法
type id = {values}称为复制列表初始化。当您第一次使用它时,它评估为std::initializer_list。它是在标准中定义的,而不是 STL。 -
不,右侧是一个 braced-init-list(语法结构),而不是
std::initializer_list(上述语法结构可能或可能不会引起)。 braced-init-list 在不同的上下文中意味着不同的东西。当它作为数组的初始化器出现时,它是聚合初始化(早于统一初始化)。
标签: arrays c++11 implicit initializer-list