2016-06-18 35 views

回答

5
int&& rv = 10; 
int& lv = rv; //no error 

首先,一個名爲對象從未右值。其次,由於rv命名爲對象,它是不是一個右值,即使它綁定到右值。由於rv是左值,因此它可以與左值綁定,沒有任何問題。

請注意,右值是表達式的屬性,而不是變量的屬性。在上面的例子中,在10之外創建一個右值,並綁定到rv,正如我所說的,它是左值。

+1

非常感謝!你完全解決了我的問題。 – Gear

+1

如果'lv = 20;'會發生什麼? 'rv'是否保存未命名變量'10'? (如果不是我們常常分配;) – ikh

+1

@ikh,如果你的意思是'int&lv = rv;'然後'lv = 20'。這很好。但是,如果你的意思是'int&lv = 20;'那麼這是無效的。你可以把'&&'看作魔術師,它使左值與* rvalue表達式*綁定。既然你只能在變量的聲明中寫'&&',即使'x'是一個左值,你也可以寫'int && x = 20;'。還有另外一個叫做'const'的魔術師,它使得一個左值與'rvalue'綁定,如:int const&lv = 20;',這是有效的。 – Nawaz