最終的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