为何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
相关产品推荐
相关产品推荐

