相同的引用如何绑定不同的对象?

时间:2016-09-12 09:45:23

标签: c++ c++11

我们知道,一旦我们将一个对象绑定到一个引用,我们就不能将另一个对象重新绑定到该引用。 但是在以下范围for语句中,相同的引用依次绑定到不同的对象或元素。

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

这怎么可能?

2 个答案:

答案 0 :(得分:5)

  

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

相同的参考。引用i(不是它指向的对象)在循环的每次迭代中被销毁并再次构造,因此它们是不同的引用。另见David的评论如下。

答案 1 :(得分:0)

  

但是在语句的以下范围内,相同的引用依次绑定到不同的对象或元素。

不,不。

看看这个:

void foo()
{
   int x = 1;
}

void bar()
{
   int x = 2;
}

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

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