Der*_*urk 11 c++ initializer-list c++11
最终的C++ 11标准包括基于范围的规定,以便为原生数组"正常工作",而不必包含<iterator>任何其他标题.据我所知,由于英国78和79的评论,在工作文件n2900中首先解决了这个问题.
该提案还包括隐含#include <initializer_list>在每个翻译单元中的条款,以便例如该程序
#include <iostream>
int main()
{
for (auto i : { 1, 2, 3, 4, 5 })
std::cout << i << "\n";
}
Run Code Online (Sandbox Code Playgroud)
即使没有包括,也会符合标准<initializer_list>.
但是,当从C++ 11中删除概念时,基于范围的修订版被修改为如n2930所示.虽然数组"正常工作"的规定仍然存在,但没有提到初始化列表也是如此; 事实上,各种标准库容器标题的规范#include <initializer_list>和8.5.4.2的最终文本意味着与我相反.
据我所知,这与该主题的最终措辞非常接近.那么,关于最终标准的程序是否完善,或者我是否需要#include <initializer_list>在基于范围的基础上使用它?换句话说,在基于范围的情况下使用初始化列表是否构成了" std::initializer_list根据FDIS的8.5.4.2 使用---甚至是未命名类型的隐式用法"?
我会说是的.根据§6.5.4[stmt.ranged]/1,声明
for (auto i : { 1, 2, 3, 4, 5 })
...
Run Code Online (Sandbox Code Playgroud)
等于
auto&& __range = { 1, 2, 3, 4, 5 };
...
Run Code Online (Sandbox Code Playgroud)
这意味着使用了一个initializer_list<int>,并且<initializer_list>需要包含标题.
| 归档时间: |
|
| 查看次数: |
2835 次 |
| 最近记录: |