一、概念:
基于范围的 for 循环迭代一个值范围中的所有值。
基于范围的 for 循环的一般形式中:
for (range_declaration : range_expression)
loop statement or block;
range_declaration 标识了一个变量,它会被依次赋予范围中的每个值,在每次迭代都会赋予一个新值。
range_expression 表示数据源的范围。
二、示例说明:
int values [] {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
int total {};
for (int x : values)
total _= x;
变量 x 在每次迭代中都会被赋予 values 数组中的一个值。它会被依次赋予 2、3、5等等。因此,循环不会在 total 中累积 values 数组中所有元素的和。
变量 x 是循环的局部变量, 在循环的外部不存在。
当然, 编译器知道 values 数组中元素的类型, 所以可以编写如下循环,让编译器确定 x 的类型:
for (auto x : values)
total += x;
使用 auto 关键字会让编译器推断出 x 的正确类型。
auto 关键字在基于范围的 for 循环中很常见。这是迭代数组或其他范围中所有元素的一种非常好的方式。不需要知道元素的个数,循环机制会自动确定。
注意范围中的值被赋予范围变量 x , 这表示不能通过修改 x 的值来修改 values 数组的元素。存储在 x 中的值会在下一次迭代时被 values 数组的下一个元素值覆盖。