2014-11-23 77 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