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中的
,一位流行实现的维护人员表示,他们的编译器合成
的整个类类型结果是不可行的。合成整个类模板似乎更加遥不可及。@paxdiablostd::cout
具有用户定义对象的语义std::initializer_list
没有,语言规则有很多特殊情况来适应它。Ftr,相关建议是,尽管我没有找到措辞的理由。