![](/img/trans.png)
[英]Passing a vector by reference and changing its values in a range-based for loop?
[英]Define a reference in a range-based for loop
我对C ++完全不熟悉,所以问题可能有点天真:D! 最近我对基于范围的声明中的一个问题感到困惑。 我们被允许写下这样的东西:
for(int &i : vec)
然后出现了混乱。 在我看来,变量i将被定义一次并在每个循环中被赋值给不同的值。 但在上面的例子中, 我是一个只是别名的引用,应该只绑定到一个对象。 我认为解决这个问题的一种方法是认为每次都定义一个新的i 。 我搜索了关于此的进一步说明并找到了一个页面: 范围 !:
语法attr(可选)
for ( range_declaration : range_expression ) loop_statement
说明
上面的语法产生类似于以下的代码(__ range,__ begin和__end仅用于说明):
auto && __range = range_expression ;
for (auto __begin = begin_expr,
__end = end_expr;
__begin != __end; ++__begin) {
range_declaration = *__begin;
loop_statement
}
'range_declaration'在for循环中定义。 但不是再利用的循环,这意味着我在第一示例中所定义的参考被再利用内定义的变量? 我仍然很困惑,任何人都可以给我一些提示。 谢谢!
循环体内定义的变量是循环体的局部变量,因此每次循环迭代时都会被破坏和重新定义。 所以int &i
在每次迭代中都是刚刚初始化的,没有问题。
如果我们将替换(通过一些简化)添加到您发布的示例中,可能会更清楚:
for (auto b = begin(vec), e = end(vec); b != e; ++b) {
int &i = *b;
//loop statement
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.