2016-07-16 36 views
4

我認爲像X&& x = static_cast<X&&>(obj_x);這樣的一種方式是,雖然出現了,但是x最終是一個普通的左值參考。我最近遇到了this article,Scott Meyers堅持認爲x是左值類型參考的左值。這是真的有意義,還是差別沒有區別?具體地,給出兩種在C++中,說變量具有類型右值引用是否有意義?

X&& x = static_cast<X&&>(obj_x) 

X& x = obj_x; 

沒有任何後續的代碼,將不同的表現爲x這兩個定義?

+1

'decltype(x)'。如果'x'是一個非靜態數據成員,它也會影響複製構造函數的生成。 – cpplearner

+0

爲什麼不把這個評論變成答案? – Ari

回答

1

重要的區別是R值引用是命名還是未命名(返回值)。因此,要回答這個問題,不要,後續代碼將不同地對待x的兩個定義(除了cpplearner提到,decltype())。只有x的定義才能在參考文獻綁定到(這將有助於網絡搜索的花哨術語)。

帶名稱的任何東西都可以再次引用,所以它被視爲一個l值來處理後續引用。爲什麼?因爲引用r值的主要原因是使移開。在你離開後,它不再可行。你所能做的就是銷燬它或者分配它。如果這個東西沒有名字就沒什麼大不了,但如果它有一個名字,很容易再次意外地使用它。這就是爲什麼你需要調用std :: move(mything)來移出我的東西[除了在某些情況下]。

我認爲這是Herb Sutter的一篇文章,讓我得到這個細節,不幸的是我現在找不到它。如果我誤解了,可能是Stephan T Lavavej。

相關問題