比方說,我有一個函數:返回值是通過C++ 0x中的右值引用傳遞的嗎?
typedef std::vector<int> VecType;
VecType randomVector();
int processing()
{
VecType v = randomVector();
return std::accumulate(v.begin(), v.end(), 0);
}
確實的C++ 0x說具體的虛假副本將從randomVector的返回值是可以避免的?或者編譯器是否需要實現RVO?在我看來,像值randomVector()
應被視爲一個右值,從而五世的移動構造函數應該叫,但我不能完全肯定這是真的。
不是一個好問題,恕我直言。該標準不能有用地陳述實現可能做什麼,而只是它必須做什麼。 – 2009-08-22 21:15:59
實際上,在你給出的例子中,返回值優化是由大多數編譯器執行的......所以它沒有右值是有效的。 還右值是向函數傳遞參數更加重要。 – Artyom 2009-08-23 07:40:21
問題的標題有點誤導。你的函數返回一個右值而不是引用。但是一個右值引用可以綁定到它,這是發生什麼情況下複製elision不能執行出於某種原因,並且該類型有一個移動構造函數(移動構造函數的參數是一個右值引用) – sellibitze 2009-09-27 08:19:29