28

来自[dcl.init.list]

模板std​::​initializer_­list未预定义;如果标题 <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 行,不依赖于其他头文件。那会有多大的开销?

4

1 回答 1

1

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

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

于 2020-10-19T08:20:10.730 回答