【发布时间】:2016-06-30 07:52:10
【问题描述】:
我正在使用这个类,不是我写的,我不能改变它的代码:
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对象中移动。这就是为什么 Herb Sutter 建议“想要速度?通过价值”。使用该构造函数,您无法避免复制构造或复制分配
标签: c++ c++11 move move-semantics rvalue