我使用這個類的功能,而不是我寫的,我不能改變它的代碼:移動成需要常量左值參考
class A {
private:
Val d_val;
public:
void setVal(const Val& val) { d_val = val; }
const Val& getVal() const { return d_val; }
};
Val
支持移動,但類A
沒有考慮到這一點被寫入。我能以某種方式在場景中避免val
的副本嗎?我懷疑std::move(val)
到setVal
將工作,因爲它不需要r值參考。
A a;
Val val;
// populate val
a.setVal(val); // I don't need val after here
不幸的是,你不能從一個'const'對象移動。這就是爲什麼赫伯特薩特建議「想要速度?通過價值」。使用該構造函數,您無法避免複製構造或複製任務 – WhiZTiM