是汽车&或者&&是否优选使用基于范围的foor环修改范围?

时间:2014-02-14 14:23:13

标签: c++ foreach

STL(人)最近关于隐式汽车和人的提议在基于循环的范围中让我想知道迭代和修改序列元素的正确方法是什么

for(auto&& elem: cont)
{
}

for(auto& elem: cont)
{
}

2 个答案:

答案 0 :(得分:1)

两者都是等价的;在第一种情况下,“引用折叠”表示elem的类型成为左值引用,因为其初始化是左值。我会说第二个更“适当”,因为它表达了实际发生的事情。

(除非正如副本的答案所指出的那样,容器会像std::vector<bool>那样打破容器需求,而reference类型实际上并不是引用类型。在这种情况下,首先将elem绑定到该类型的临时,而第二个将不编译。)

答案 1 :(得分:0)

没有“适当”的东西;这取决于你正在迭代什么以及你想对每个迭代做什么。