此指针是 r 值吗?

Is this pointer an r-value?

本文关键字:值吗 指针      更新时间:2023-10-16

我所知道的是:

  1. L-Value是一个表达式(可以是单个变量表达式,即x),它具有一些地址(意味着它存储在内存中并且可以引用,超出了当前表达式的范围)。

  2. "this指针"指向对象本身,这意味着它保存了对象的地址,这反过来意味着它是一个L值(根据第1点中的定义)。
我想知道的是:

  1. "这个指针"真的是L值吗?因为在一篇文章中" '这个'指针的类型"人们说"这个指针"不是L值

  2. 如果"这个指针"不是L值,那么它是R值还是其他值?

从幼稚的角度来看,您对左值的基本描述是一个相当不错的一般规则,但是在表达式评估存在值到右值转换的情况下,它就崩溃了,并且它没有考虑明显的例外,例如this关键字。

由于this本身不是一个你可以修改或认为真正"存储"在任何地方的指针——回想一下,它的值是由编译器根据上下文自动确定的——委员会决定最好把它作为一个右值表达式。

因此,你关于内存地址的推理并不完全正确:this 作为一个指针,当然包含一个内存地址作为其物理值(在典型系统上),但这并不意味着它本身有一个。尝试获取其地址:&this不起作用。