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

为何C++引用不是对象,却可以配合&、*运算符使用?

核心原因:C++中所有在表达式里使用引用的场景,都会自动替换为它绑定的对象,引用本身不会参与运算


首先澄清类型声明和运算符的区别:
你代码里int *&r = p;中的*和&都属于类型声明符的一部分,不是运算符:int*&的含义是「指向int的指针的左值引用」,r是绑定到指针变量p的引用,本身不属于对象范畴,没有独立的存储空间。

你提到的两个运算符的作用逻辑分别是:

  • 对r使用*运算符:
    表达式里的r会先被自动替换为它绑定的对象p,p是int*类型的指针,*是指针解引用运算符,作用是拿到p指向的int变量i,所以*r = 0等价于*p = 0,最终把i的值修改为0,完全符合语法规则。
  • 对r使用&运算符:
    同理,表达式里的r会先被替换为绑定的对象p,&是取地址运算符,作用是拿到指针变量p自身的存储地址,所以&r的结果和&p完全一致,你拿到的不是r的地址(引用本身没有独立地址),而是p的地址。

补充一个常见误区:不要把类型声明里的&/*和表达式里的&/*混淆:

  • 类型声明里的&表示这是一个引用类型,*表示这是一个指针类型
  • 表达式里的&是取地址运算符,*是指针解引用运算符
    两者除了写法一样,没有任何关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:15:02