同一个引用如何绑定不同的对象

How is the same reference binding different objects?

本文关键字:对象 绑定 引用 何绑定 同一个      更新时间:2023-10-16

我们知道,一旦将一个对象绑定到引用,就无法将另一个对象重新绑定到该引用。但在以下范围的for语句中,同一引用按顺序绑定到不同的对象或元素。

std::string s;
for(auto &i:s)
{/*each character is referred sequentially*/
}

这怎么可能?

相同的引用绑定到不同的对象

它是而不是相同的引用。引用i(而不是它所指向的对象(在循环的每次迭代中都会被破坏和重新构造,因此它们是不同的引用。另请参阅下面大卫的评论。

但在下面的语句范围内,同一引用按顺序绑定到不同的对象或元素。

不,没有。

看看这个:

void foo()
{
   int x = 1;
}
void bar()
{
   int x = 2;
}

两个x是不同的变量,对吧?

循环中的i也是如此。这就是它的工作定义。你在这里写的不是老式的for (int i = 0; i < N; i++)