You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中能否重置引用指向其他值?含代码有效性问询

你的代码是合法且行为定义明确的C++代码

首先得澄清一个关键误区:你并没有“重置引用”——你只是在通过引用修改它绑定的原始对象,这完全符合C++的规则。

咱们拆解一下代码里的操作:

  • 当你创建std::pair<std::string &, std::string &> p { x, y };时,p.first被初始化为绑定到x的引用,p.second绑定到y。一旦初始化完成,这两个引用的绑定关系就固定了,永远不能再指向其他对象。
  • 而p.first = "1";这个操作,本质是把字符串字面量"1"赋值给p.first所绑定的对象(也就是x),并不是改变p.first这个引用本身的绑定。同理p.second = "2";是修改y的值,这和直接写x = "1"; y = "2";的效果完全一致。

如果后续你尝试写类似p = {i, j};这样的代码,也不会让p.first重新绑定到i——这个操作实际上是把i的值赋给x,j的值赋给y,因为pair的赋值运算符对于引用成员的处理是:将右侧引用指向的对象的值,赋值给左侧引用指向的对象,而不是修改引用的绑定。

总结一下:引用的核心限制是不能改变它绑定的对象,但通过引用修改绑定对象的值是完全合法且常见的操作,你的代码正好属于这种情况,所以在clang和g上能正常运行是符合标准的。

内容的提问来源于stack exchange,提问作者user534498

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:38:35