gpt4 book ai didi

c++ - #include 需要在基于范围的情况下使用初始化列表吗?

转载 作者:可可西里 更新时间:2023-11-01 15:20:28 26 4
gpt4 key购买 nike

最终的 C++11 标准包括对基于范围的 for 的规定,以便在不必包含 <iterator> 的情况下“仅适用于” native 数组。或任何其他标题。据我所知,这首先在工作文件 n2900 中得到解决。作为评论 UK 78 和 79 的结果。

该提案还包括一项隐式规定 #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>甚至在基于范围的情况下使用它?换句话说,根据 FDIS 的 8.5.4.2,使用基于范围的初始化程序列表是否构成“使用 std::initializer_list ---甚至是未命名类型的隐式使用”?

最佳答案

我会说是的。根据§6.5.4[stmt.ranged]/1,声明

for (auto i : { 1, 2, 3, 4, 5 })
...

就等同于

auto&& __range = { 1, 2, 3, 4, 5 };
...

这意味着 initializer_list<int>被使用,<initializer_list>需要包含 header 。

关于c++ - #include <initializer_list> 需要在基于范围的情况下使用初始化列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8913701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com