最终的 C++11 标准包括对基于范围的 for 的规定,以便对本机数组“正常工作”,而无需包含<iterator>
或任何其他标头。据我所知,这首先在工作文件n2900中作为评论 UK 78 和 79 的结果得到解决。
该提案还包括#include <initializer_list>
在每个翻译单元中隐含的规定,例如,程序
#include <iostream>
int main()
{
for (auto i : { 1, 2, 3, 4, 5 })
std::cout << i << "\n";
}
即使不包括 . 也会符合标准<initializer_list>
。
但是,当从 C++11 中删除概念时,基于范围的 for 进行了修改,如n2930 所示。虽然保留了数组“正常工作”的规定,但没有提到初始化列表也是如此;事实上,各种标准库容器头文件的规范#include <initializer_list>
和 8.5.4.2 的最终文本对我来说是相反的。
据我所知,这与该主题的最终措辞非常接近。那么,关于最终标准,上述程序是否格式正确,或者我是否需要#include <initializer_list>
在基于范围的情况下使用它?换句话说,根据std::initializer_list
FDIS 的 8.5.4.2,在基于范围的 for 中使用初始化列表是否构成“使用 --- 甚至是未命名类型的隐式使用”?