对范围循环感到困惑

时间:2020-05-05 03:28:10

标签: c++ ranged-loops

对我来说,这不会产生预期的结果:

int main() {

    int i[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

    for (auto v : i)
        std::cout << v << std::endl;

    for (auto v : i)
        v = v+1;

    for (auto v : i)
        std::cout << v << std::endl;

    return 0;
}

第二个for循环似乎没有任何作用。基于范围的for循环是只读的,还是我缺少某些内容?

1 个答案:

答案 0 :(得分:3)

在第二个循环auto v : i中,v是每个i副本

要更改i的值,您需要一个reference

int main() {
  int i[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

  for (auto v : i)
    std::cout << v << std::endl;

  for (auto& v : i)  // Add "&" here. Now each v is a reference of i.
    v = v + 1;

  for (auto v : i)
    std::cout << v << std::endl;

  return 0;
}

演示:https://ideone.com/DVQllH