C ++ 11基于范围,适用于auto

时间:2012-12-10 16:40:17

标签: c++ c++11 foreach auto rvalue-reference

  

可能重复:
  What is the advantage of using universal references in range-based for loops?

要迭代vector<int>的元素来阅读它们,我认为以下使用C ++ 11 基于范围的auto是正确的:< / p>

std::vector<int> v;
....
for (auto n : v)
{
   // Do something on n ...
   ....
}

如果存储在容器中的元素不是简单的整数,而是“更重”的东西,比如说std::string s,我的理解是在vector<string>中迭代它们正确使用范围 - 基于+ auto

std::vector<std::string> v;
....
for (const auto& s : v)
{
   // Do something on s ...
   ....
}

使用const &可以避免无用的深拷贝,并且应该没问题,因为循环代码只是观察向量的内容。

到目前为止,我的理解是否正确?

现在,我看到代码在基于范围的for循环中使用了另一种形式的autoauto&&,例如:

for (auto&& elem : container)
  ....

这种用法有用吗?使用基于范围的for循环的r值引用(&&)有什么好处?在什么情况下我们应该使用这种风格?

0 个答案:

没有答案