2012-11-08 136 views
4

this conference,斯科特邁耶斯開始說「左值通常是表達式,你可以採取的地址」。我一般強調這個詞:什麼是你不能接受的地位? (如果存在)。地址不能被接受是什麼樣的左值?

編輯: 請提供您的答案代碼片段,它使事情更清晰。

+1

您是否在您的標題中指** ** lvalues **? –

+0

yea o.O不敢相信我寫了右值 – qdii

+0

我沒有進入完整的會議視頻,但看看周圍的文字我想S.M.這裏真的是在討論'rvalues'。關於你的問題,我發現的最相關的東西似乎可以在這裏找到:(http://thbecker.net/articles/rvalue_references/section_05.html) –

回答

7

我認爲bitfields滿足你的條件...我相信f.x是一個左值,但你不能把它的地址。有趣的是,你也不能這樣做auto & x = f.x

C++ 11第8.3.1節部分第4段組成:由於位字段(9.6)的地址不能採取,指針不能指向一個位字段。

struct foo { 
    int x : 3; 
    int y : 3; 
    int z : 3; 
}; 

int main() { 
    foo f; 

    f.x = 3; 
} 

我甚至不太確定這個其他的想法,但標準說,你不準使用的主要功能。如果採用main的地址來使用它,那麼這也足夠了。 C++ 11 3.6.1第5段


而從評論我離開了,我知道,TI延長他們的C和C++編譯器,有一個名爲cregister存儲類,你不能拿的地址。 (因爲它指的是一個沒有地址概念的物理寄存器)。

+1

把東西的地址定義爲「使用ODR」,所以我認爲你對「main」是正確的。 – ildjarn

+0

@ildjarn無論如何,由於'main'不是一個左值,這裏有趣嗎? –

+0

@Konrad:'main'是一個函數,函數是左值。我在§3.6.1中看不到任何其他內容 - 我錯過了什麼? – ildjarn

0

您可以從命名符號(例如與臨時實例)中獲取地址。就我理解這個解釋而言,這就是構成一個左值。

相關問題