为了避免复制对象,通常最好这样做
for(auto &x : container){...}

for(auto x : container){...}
但是在常规C++中,引用是非常量的,这将允许修改容器。因此,当我们在不修改数据的情况下使它们成为const时,是否理所当然地要进行以下操作?
for(const auto &x : container){...}

最佳答案

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

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

  • 还有一个proposal允许
    for(x : container) { ... }
    

    这将是不太冗长的形式
    for(auto&& x : container) { ... }
    

    关于c++ - 在for-each循环中使用 'const'时是否需要添加 'auto'?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25410899/

    10-13 07:03