加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 06:01:50 所属栏目:百科 来源:网络整理
导读:最终的C11标准包括基于范围的规定,用于为本机阵列“正常工作”,而不必包括 iterator或任何其他标题.据我所知,在工作文件 n2900中,由于英国78和79的评论,这一点首先得到了解决. 该提案还包含一个隐含#include initializer_list在每个翻译单元中,该程序 #inclu
最终的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>标题需要包括在内.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读