在 for-each 循环中使用 'auto' 时是否需要添加'const'?

Do I need to add 'const' when using 'auto' in for-each loop?

本文关键字:是否 添加 const auto 循环 for-each      更新时间:2023-10-16

为了避免复制对象,通常最好使用

for(auto &x : container){...}

for(auto x : container){...}

但是在常规c++中,引用是非const的,这允许对容器进行修改。因此,我们是否应该理所当然地做以下事情,就像我们在不修改数据时使方法const一样?

for(const auto &x : container){...}

这取决于您想在for语句体中做什么。

  • 如果你想对你迭代的元素进行只读访问,那么使用auto const&
  • 如果你想修改元素,那么使用auto&&。我更喜欢auto&,因为它处理解引用容器的迭代器产生右值的情况(vector<bool>)。

还有一个建议允许

for(x : container) { ... }

的一种简洁形式
for(auto&& x : container) { ... }