我需要添加' const'当使用' auto'在for-each循环中?

时间:2014-08-20 17:25:27

标签: c++ c++11

为了避免复制对象,通常做得更好

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

大于

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

但是在常规C ++中,引用是非const的,它允许修改容器。因此,我们是否应该按照以下方式执行以下操作,就像我们在不修改数据时制定方法const一样?

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

1 个答案:

答案 0 :(得分:4)

这取决于您在for语句正文中要执行的操作。

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

还有proposal允许

for(x : container) { ... }

这将是一个不那么详细的

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