gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:55:49 34 4
gpt4 key购买 nike

我是 C++ 的新手,所以这个问题可能有点幼稚:D!最近我被一个关于在基于范围的for中声明的问题弄糊涂了。我们可以这样写:

for(int &i : vec)

然后发生了困惑。在我看来,变量 i 将被定义一次并在每个循环中分配给不同的值。但在上面的例子中,i 是一个引用,它只是一个别名,应该只绑定(bind)到一个对象。我认为解决这个问题的一种方法是认为每次都定义一个新的 i。我搜索了对此的进一步解释并找到了一个页面:range for !:


语法属性(可选)

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 循环中定义的。但是,在循环中定义的变量不是被重用了吗?这意味着在第一个示例中定义的引用 i 被重用了吗?我仍然很困惑,任何人都可以给我一些提示。谢谢!

最佳答案

在循环体内定义的变量是循环体内的局部变量,因此每次循环迭代时都会销毁并重新定义。所以 int &i 在每次迭代中都被重新初始化,没有问题。

如果我们对您发布的示例进行替换(进行一些简化),可能会更清楚:

for (auto b = begin(vec), e = end(vec); b != e; ++b) {
int &i = *b;
//loop statement
}

关于c++ - 在基于范围的 for 循环中定义引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20378684/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com