首页 > 后端开发 > C++ > C 引用是否可以重新分配,或者是否发生了其他情况?

C 引用是否可以重新分配,或者是否发生了其他情况?

Susan Sarandon
发布: 2024-12-04 22:07:13
原创
403 人浏览过

Can C   References Be Reassigned, or Is Something Else Happening?

在 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 最初指向 i,然后更改为引用 j。

问题:

此代码是否真正重新分配引用 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板