前段時間有人告訴我,實施雙元運營商的通常模式需要最後的move
作爲回報。C++ 0x T operator +(const T&,T &&)模式,仍然需要移動?
Matrix operator+(const Matrix &a, Matrix &&b) {
b += a;
return std::move(b);
}
但是,現在是在return
編譯器可以把返回值作爲一個暫時的,那麼這將不會是必要的特殊規則 - 一個簡單的return b
就足夠了。
但話又說回來,b
在這個函數中有一個名,因此,它的左值 - 這阻礙了編譯器到m認爲這是一個臨時的,並且需要move
。
這是最新版本的C++ 0x標準的情況嗎? 我們需要move
來實現上述模式?
根據[這個答案](http://stackoverflow.com/questions/6009004/are-value-parameters-implicitly-moved-when通過值返回/ 6009012#6009012),'std :: move'不是必須的。 – fredoverflow
雖然它可以有所不同,該參數是一個'矩陣&&'而不是'矩陣'... – fredoverflow
它*是*複雜的,是的。是的,我認爲你是對的。如果它的a *值參數*像'Matrix'那麼你就有一個單獨的原始拷貝 - 一個溫度。編譯器知道你可以從中抓取。用'Matrix &&'我不*確定 - – towi