理解 C 中的引用重新分配
在 C 中,通常指出引用需要在声明时初始化,并且不能重新分配。然而,最近的一项实验对这一概念提出了质疑。让我们研究一下以下程序中引用重新分配的行为:
#include <iostream> #include <stdio.h> #include <conio.h> using namespace std; int main() { int i = 5, j = 9; int &ri = i; cout << "ri is : " << ri << "\n"; i = 10; cout << "ri is : " << ri << "\n"; ri = j; // *** Reassignment at Issue *** cout << "ri is : " << ri << "\n"; getch(); return 0; }
程序将引用 ri 分配给整型变量 i,使 ri 成为 i 的别名。最初,ri 指向值 5。当 i 修改为 10 时,ri 正确反映了这一变化。然而,关键点是下一个语句:ri = j。
这不是引用的重新分配吗?
令人惊讶的是,答案是否。 ri 仍然是对 i 的引用。为了证明这一点,您可以比较 ri 和 i 的地址:它们是相同的。您观察到的不是引用的重新分配,而是对 ri 指向的内存位置存储的值的修改。
简单来说,ri = j 相当于 *(&ri) = j ,其中 &ri 检索 ri 的内存地址,并 * 取消引用它以访问该值。
作为比较,如果您创建 const int &cri = i,它将阻止任何重新分配给 cri,强制其不变的性质。
总之,虽然引用不能重新分配给 C 中的新变量,但它们可以用于修改它们引用的对象的值,如我们的程序中所示。
以上是C 中的引用可以重新分配吗?的详细内容。更多信息请关注PHP中文网其他相关文章!