2010-06-09 84 views
5

瞭解右值和臨時對象之間的區別花了我相當長的一段時間。但現在75頁的最終狀態委員會草案:FCD中的右值和臨時對象

右值 [...] 的x值,臨時對象或其子對象,或者是不具有關聯的值目的。

我不敢相信我的眼睛。這一定是一個錯誤,對吧?


要澄清一下,這裏就是我所理解的術語:

#include <string> 

void foo(std::string&& str) 
{ 
    std::cout << str << std::endl; 
} 

int main() 
{ 
    foo(std::string("hello")); 
} 

在這個程序中,有兩個表達式是表示同臨時對象:在prvalue std::string("hello")和左值str。表達式不是對象,但它們的評估可能會產生一個。具體而言,對價值的評估產生了一個臨時對象,但是價值並不是一個臨時對象。有人同意我或我瘋了嗎? :)

+2

你可能會考慮通過發佈一個問題直接詢問標準人員comp.lang.C++。std – 2010-06-09 17:07:13

+0

@Noah:我做到了。讓我們看看會發生什麼:) – fredoverflow 2010-06-09 17:36:32

+0

[鏈接到comp.std.C++線程](http://groups.google.de/group/comp.std.c++/browse_thread/thread/5cdae718218a462c) – fredoverflow 2010-06-10 21:48:05

回答

2

是的,我同意你的意見。這應該在我看來是固定的,我深深的敬意的幾個人也提出了同樣的問題。

0

這並不像聽起來那麼複雜。我指的是現已完成的標準ISO/IEC 14882-2011。第78頁說:

的x值(一個「到期」值)也指一個對象,通常靠近 其壽命終點(使得其資源可以被移動,用於 例子)。 xvalue是涉及右值引用(8.3.2)的某些類型表達式 的結果。

上面的粗體字已被我添加了。該標準進一步說:

右邊的值(所謂的,歷史上,因爲右值可以出現在 賦值表達式的右手側)是x值,一個 臨時對象(12.2)或者子對象物,或者與對象關聯的值不是 。

所以你只有在玩'某些類型的涉及右值引用的表達式'時纔會得到一個xvalue。否則,你的臨時對象就是那個 - 臨時對象。

+0

刪除嵌入的問題。問它是另一個問題。 – quantum 2012-10-20 01:31:41