簡體   English   中英

是int&foo();一個左值?

[英]Is int & foo(); an lvalue?

我知道可能還有其他類似的問題,但他們並沒有完全回答我的問題。

我一直在瀏覽關於C++類型演繹的講座中的一些幻燈片,其中一個我發現了以下聲明:

int & foo();           // foo() is lvalue;

起初,我認為這是錯誤的 - foo是一個函數,它不能被賦值,它不是一個左值。 但現在我認為作者可能會有不同的想法。 也就是說, 函數調用可能是左值,而不是函數本身。

換句話說:

  1. foo一個左值?
  2. foo()一個左值?
  3. 是否可以賦予函數( 而不是函數調用 )(即foo = something; )?
  4. “左值是可以分配給的每個對象/事物” - 這個陳述是否始終正確和准確?

問題4需要更多解釋。 有了它,我試圖了解一個左撇子究竟是什么。 我看到的另一個定義是:“左值具有可以獲得的存儲地址”。 我不確定存儲地址究竟是什么,但以我們的函數foo為例 - 我們絕對可以獲得該函數的一些地址。 C++它只是函數的名稱

foo;   // returns the address of funtion 'foo'

但與此同時,我認為我們不能指定給foo (問題3 )。 那么 - 它是否是左值?

如果你回答了全部4分,我會很感激。 我將問題標記為C++而不是C++11因為我認為該問題適用於該語言的所有版本。 但是,如果有任何差異,請提及它們。

foo一個左值?

是。 指定函數的主表達式是左值 但是,在某些上下文中,函數被隱式轉換為指針; 該指針是一個prvalue (或者只是一個rvalue ,在C ++ 11之前)。

foo()一個左值?

是。 如果結果是左值引用類型,則函數調用的左值 ,如此處所示。

可以分配功能(不是函數調用)

不可以。只能分配可修改的對象。

“左值是可以分配給的每個對象/事物” - 這個陳述是否始終正確和准確?

不。 左值是表示函數或對象的表達式。 只有在指定可修改對象時才能分配它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM