在 C 中重新分配引用
在 C 中,引用通常被描述为到内存地址的不可变绑定。然而,最近的一个问题却引发了人们对这种理解的质疑。为了探讨这个主题,让我们检查以下 C 程序:
#include <iostream> int main() { int i = 5, j = 9; int &ri = i; std::cout << "ri is: " << ri << '\n'; i = 10; std::cout << "ri is: " << ri << '\n'; ri = j; // Is this not reassigning the reference? std::cout << "ri is: " << ri << '\n'; return 0; }
此代码编译成功,其输出为:
ri is: 5 ri is: 10 ri is: 9
问题出现了:赋值 ri 不是吗? = j;与不可变引用的概念相矛盾?
不,ri 仍然是对 i 的引用。这可以通过打印 ri 和 i 的地址并观察它们是否相同来验证。
实际发生的是 ri 引用被用来修改 i 的值。为 ri 分配新值确实是被禁止的,因为引用是不可变的,并且必须始终指向相同的内存位置。
为了进行比较,请考虑以下代码:
const int &cri = i;
这代码不允许对 cri 进行赋值,因为它是对常量的引用。这表明,虽然引用不能重新分配到新的内存位置,但它们仍然可以用于修改它们引用的地址处的值,前提是该值是可变的。
总而言之,ri = j;原始程序中的赋值并不是对引用本身的重新赋值,而是对其引用的值进行了修改。
以上是C 引用可以重新分配吗?的详细内容。更多信息请关注PHP中文网其他相关文章!