最终的C++ 11标准包含基于范围的规定,以便为本地阵列“正常工作”,而不必包含<iterator>
或任何其他头文件。据我所知,这首先是在工作文件n2900中作为评论UK 78和79的结果。#include <initializer_list>需要使用基于范围的初始化器列表吗?
该提案还包括在每个翻译单元中隐含#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中未指定类型的隐式使用”?
很确定这是“是”。如果不是初始化器列表,你的循环还会迭代什么? – 2012-01-18 16:39:33