在 C 中可以重新分配引用吗?
在 C 中,引用通常被吹捧为必须一劳永逸地初始化的不可变实体。然而,最近的一个代码片段对此原则提出了疑问。
代码片段:
int i = 5, j = 9; int &ri = i; cout << "ri is : " << ri << "\n"; i = 10; cout << "ri is : " << ri << "\n"; ri = j; cout << "ri is : " << ri << "\n";
观察:
问题:
此代码是否真正重新分配引用 ri 还是其他内容发生了吗?
答案:
不,ri 仍然是对 i 的引用。表面上的重新赋值实际上是通过引用 ri 对 i 进行了修改。
说明:
当声明引用时(例如 int &ri = i),它会绑定到对象(在本例中为 i),并在整个程序中保持与其链接。代码 ri = j 不会重新分配 ri,而是通过引用 ri 修改 i 的值。
为了证明这一点,可以使用 &ri 和 &i 打印 ri 和 i 的地址,这将表明它们仍然存在相同。此外,如果将 ri 重新分配给 j,则将无法再通过 ri 修改 i,但给定代码中的情况并非如此。
结论:
虽然代码片段中的引用似乎是可重新分配的,但事实并非如此。相反,它们间接修改它们引用的对象。 Const 引用(例如 const int &cri = i)可防止此类修改并强制执行真正的不变性。
以上是C 引用是否可以重新分配,或者是否发生了其他情况?的详细内容。更多信息请关注PHP中文网其他相关文章!