在范围for循环中使用引用是否属于“为引用重新绑定不同对象”?
范围for循环中的引用是否属于重新绑定?
先看这段C++范围for循环代码:
for (int& i : array) { //do something on i }
从C++语言层面来说,这不属于引用的重新绑定。
虽然从表现上看,每次迭代时i好像指向了数组的不同元素,但这是个表象。C++里引用一旦初始化就不能改变绑定的对象,这是语言的硬性规则。
从语言逻辑的等价展开来看,这段范围for循环的行为近似于:
auto&& __range = array; for (auto __begin = __range.begin(), __end = __range.end(); __begin != __end; ++__begin) { int& i = *__begin; // 每次迭代都是初始化一个新的引用,而非修改已有引用的绑定 // do something on i }
简单说,每次循环都会生成一个名叫i的新引用,它被绑定到当前迭代的数组元素上——并非同一个i被重新绑定到了不同对象。
内容的提问来源于stack exchange,提问作者Zackham
相关产品推荐
相关产品推荐

