首页 >后端开发 >C++ >C 引用可以重新分配吗?

C 引用可以重新分配吗?

Susan Sarandon
Susan Sarandon原创
2024-12-02 12:44:14778浏览

Can C   References Be Reassigned?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn