要求包含 <initializer_list>?

What is the rationale for requiring inclusion of <initializer_list>?

本文关键字:list gt initializer lt 包含      更新时间:2023-10-16

From [dcl.init.list]

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

既然std​::​initializer_­list无论如何都是编译器的特殊情况,为什么它不被视为语言的一流语法?

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

命名空间污染

可以像std::size_t一样解决,包含标头只引入了标识符。

请注意,即使不包含任何标头,auto sz = sizeof(0); 的格式也很好,而不是auto il = {1, 2, 3};格式不正确。

编译开销

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

似乎背后

没有理性。也许当时希望进一步的语言决议和修改允许实现,但现在看来这并不真实。

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