我有一個簡單的類:我應該使用rvalues編寫std :: string構造函數嗎?
class X
{
std::string S;
X (const std::string& s) : S(s) { }
};
我讀過一些關於右值最近,我一直在想,我是否應該使用右值寫構造函數X
,這樣我就可以做臨時檢測std::string
類型的對象?
我認爲它應該是這個樣子:
X (std::string&& s) : S(s) { }
至於我所知,在編譯器支持C++ 11應該使用它執行的std :: string的的可用時移動的構造。
[相關](http://stackoverflow.com/questions/7592630/is-pass-by-value-a-reasonable-default-in-c11)。 –
引用的代碼是一個破碎的模式,它包含了兩個世界中最糟糕的代碼:它約束調用者被要求傳遞一個右值給'X()',但是它不能將右值轉發給'S'的構造函數,因此它不能移動並且必須複製。所以,它給這個功能的使用者帶來了負擔,同時阻止他們獲得任何補償性的回報。 –
@underscore_d我認爲五年後,我們已經就答案達成了一致意見,我的代碼並不完美;) –