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

Pas*_* By 11 c++

来自[dcl.init.list]

模板std?::?initializer_­list未预定义; 如果在使用之前未包含标题std?::?initializer_­list- 即使是未命名类型的隐式用法 - 程序也是格式错误的.

既然std?::?initializer_­list编译器是特殊的,那么为什么它不被视为语言的一流语法?

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

命名空间污染

可以解决就像std::size_t,包含头只引入标识符.

注意,auto sz = sizeof(0);即使没有包含任何标题,如何形成良好,而不是auto il = {1, 2, 3};形成错误.

编译开销

libstdc ++实现的std::initializer_list字面数小于50行,不依赖于其他标头.这有多大的开销?

Zig*_*zor 1

这背后似乎没有任何道理。也许当时希望进一步的语言解决和修改可以实现,但现在看来这并不现实。

无论如何,可以在此处找到有关该论证的进一步阅读。