c – #include需要使用基于范围的初始化程序列表?

前端之家收集整理的这篇文章主要介绍了c – #include需要使用基于范围的初始化程序列表?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最终的C11标准包括基于范围的规定,用于为本机阵列“正常工作”,而不必包括< iterator>或任何其他标题.据我所知,在工作文件 n2900中,由于英国78和79的评论,这一点首先得到了解决.

该提案还包含一个隐含#include< initializer_list>在每个翻译单元中,该程序

#include <iostream>

int main()
{
    for (auto i : { 1,2,3,4,5 })
        std::cout << i << "\n";
}

即使没有包含< initializer_list>将是标准的.

然而,当概念从C11中删除时,基于范围的修改n2930所示.尽管数组的“正常工作”规定仍然存在,但没有提到初始化列表也是如此;实际上,各种标准库容器头将#include< initializer_list>的规范而8.5.4.2的最终文本意味着与我相反.

据我所知,这与这个话题的最后措辞非常接近.那么,上面的程序是对最终标准的完善,还是需要#include< initializer_list>甚至使用它在一个基于范围的?换句话说,使用基于范围的初始化器列表是否构成了FDIS的每个8.5.4.2的“使用std :: initializer_list —即使是类型未命名的隐式用法”?

解决方法

我会说是的.根据§6.5.4[stmt.ranged] / 1,声明
for (auto i : { 1,5 })
    ...

只是相当于

auto&& __range = { 1,5 };
...

这意味着initializer_list< int>被使用,< initializer_list>标题需要包括在内.

原文链接:https://www.f2er.com/c/113003.html

猜你在找的C&C++相关文章