要求包含<initializer_list>的理由是什么?

时间:2018-03-19 17:29:59

标签: c++

来自[dcl.init.list]

  

模板std​::​initializer_­list未预定义;如果在使用std​::​initializer_­list之前未包含标题 - 即使是未命名类型的隐式用法 - 程序也是不正确的。

由于编译器特别提到了std​::​initializer_­list,所以为什么它不被视为语言的第一类语法?

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

命名空间污染

可以像std::size_t一样解决,只包含标题introduces the identifier

请注意auto sz = sizeof(0);即使没有包含任何标题也是如此格式良好,而不是auto il = {1, 2, 3};格式不正确。

编译开销

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

1 个答案:

答案 0 :(得分:1)

似乎背后没有任何理由。也许当时有人希望进一步的语言解析和修改允许实现,但是现在看来这还不是真的。

在任何情况下,都可以在here上找到有关该参数的更多信息。