可能重复:
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循环中使用了另一种形式的auto
:auto&&
,例如:
for (auto&& elem : container)
....
这种用法有用吗?使用基于范围的for循环的r值引用(&&
)有什么好处?在什么情况下我们应该使用这种风格?