initializer_list是否被认为是C++核心语言的一部分



我问是因为auto{}推导为initializer_list。我不知道标准库中还有什么类是核心语言所依赖的。你可以去掉vectorarray,C++仍然可以工作,但去掉initializer_list,它就会坏掉。

您称之为{}(特别是= {...})的标准调用复制列表初始化

是的,std::initializer_list在标准的措辞中得到了特殊考虑。

如果占位符类型说明符的形式为类型约束auto,则使用模板参数推导规则来确定替换T的推导类型T。如果初始化是复制列表初始化,则std​::​initializer_­list的声明应在([basic.lookup.general])占位符类型说明符之前

[Example 1:
auto x1 = { 1, 2 };             // decltype(x1) is std​::​initializer_­list<int>
auto x2 = { 1, 2.0 };           // error: cannot deduce element type
auto x3{ 1, 2 };                // error: not a single element
auto x4 = { 3 };                // decltype(x4) is std​::​initializer_­list<int>
auto x5{ 3 };                   // decltype(x5) is int

最新更新