繁体   English   中英

在基于范围的for循环中定义引用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM