C++ 要求纳入<;初始值设定项列表>;?

C++ 要求纳入<;初始值设定项列表>;?,c++,header-files,c++-standard-library,stdinitializerlist,C++,Header Files,C++ Standard Library,Stdinitializerlist,从 模板std​::​未预定义初始值设定项列表;如果在使用std之前未包括标题​::​初始值设定项列表——即使是未命名类型的隐式使用——程序的格式也不正确 因为std​::​初始值设定项列表是编译器的特殊情况,为什么不将其视为语言的一级语法 我对一些可能性及其反驳的看法: 名称空间污染 可以像std::size\u t一样解决,只包含标题 注意如何auto sz=sizeof(0)格式良好,甚至不包含任何头文件格式不正确 编译开销 std::initializer_list的libstdc++实

模板
std​::​未预定义初始值设定项列表
;如果在使用
std之前未包括标题​::​初始值设定项列表
——即使是未命名类型的隐式使用——程序的格式也不正确

因为
std​::​初始值设定项列表
是编译器的特殊情况,为什么不将其视为语言的一级语法

我对一些可能性及其反驳的看法:

名称空间污染 可以像
std::size\u t
一样解决,只包含标题

注意如何
auto sz=sizeof(0)auto-il={1,2,3}相反,code>格式良好,甚至不包含任何头文件格式不正确

编译开销
std::initializer_list
的libstdc++实现实际上少于50行,不依赖于其他头。这会有多大的开销?

似乎背后没有理性。也许在当时,人们希望通过进一步的语言解析和修改来实现,但现在这似乎并不现实


在任何情况下,都可以找到关于该参数的进一步阅读。

也许是为了让旧代码避免隐式列表初始化,否则它将是模糊的或不需要的?另一个例子是
typeid
(需要
std::type\u info
),以及C++2a中的
,一位流行实现的维护人员表示,他们的编译器合成
的整个类类型结果是不可行的。合成整个类模板似乎更加遥不可及。@paxdiablo
std::cout
具有用户定义对象的语义
std::initializer_list
没有,语言规则有很多特殊情况来适应它。Ftr,相关建议是,尽管我没有找到措辞的理由。