2014-11-23 56 views
0

我知道的是: 这个指针是一个r值吗?

  1. 一个L值是表达式(可以是单个可变表达即,X),其中有一些地址(这意味着它的存储在存储器中,并且可以被称为,超越现有的范围表达)。

  2. “这个指针”指向对象本身,这意味着它保持这反过来又意味着它是一个L值(根据定义在点1)的对象的地址。
我想知道的是:

  1. 是 “这个指针” 真正的左值?由于在后“Type of 'this' pointer”的人说,“这个指针”不是L-值

  2. 如果“这个指针”不是L-值,则它的R值或别的东西, ?

+0

您链接的帖子似乎很好地解释了这个问题。 – 2014-11-23 23:09:32

+1

这篇文章有点不同,是在不同的背景下,我只需要点答案,这就是为什么我发布我的问题的子弹形式。 我的意思是答案是/否。 – 2014-11-23 23:13:54

+0

但是vsoftco在我提到的我的问题中很多人都很自信地说“这个指针”不是一个L值,或者他们说“这个指针”是一个R值,这就是为什么我很困惑。因为我认为“这个指针”是一个L值,并且那个帖子里的人都说这不是一个L值 – 2014-11-23 23:22:38

回答

3

你的左值基本描述是从一个天真的角度来看,还算不错的一般规则,但它分崩离析在左值至 - 右值转换存在表达式求值,并不包含明显的例外,例如this关键字。

由于this本身不是指针,你可以修改或相信真的是“储存”在任何地方—召回,它的价值是由编译器基于上下文—委员会决定,这将是最好的当成一个自动确定右值表达式。

因此,您的内存地址推理是不完全正确:this,作为指针,肯定包含一个内存地址作为其物理价值(在典型系统),但是,这并不意味着它有一个供自己使用。尝试取其地址:&this无法正常工作。

+0

我喜欢这个解释(和它直接回答OP的问题)。提供参考委员会的决定,我会upvote这;-) – jdigital 2014-11-23 23:27:52

+0

那么猜测是什么,这就像一个常量变量的地址是不可见的程序员,也是程序员不能修改它,但它的地址是在编译器内部是已知的,它的值由编译器自己根据上下文改变,对吧? – 2014-11-23 23:38:30

+0

不完全:程序员可以看到const变量的地址。 – jdigital 2014-11-23 23:43:29

相关问题