【发布时间】:2016-01-24 18:30:19
【问题描述】:
STL 类将swap() 方法定义为void swap(A&),采用左值引用。例如见std::vector::swap,或这个问题“Is `std::move` necessary here?”。
这样的定义意味着我们不能与 r-values 交换,因为 r-value 不会绑定到 但是,我认为与 r-values 交换没有什么害处。建造它,偷取它,在里面放一些胆量,然后摧毁它。完毕。我们可以添加另一个重载void swap(A&&) 来实现它。
我只看到我们没有开箱即用这种过载的一个原因。因为不是写
v.swap(rvalue);
最好写
v = rvalue;
我们将触发移动分配,而不是交换,这更加有效。我说这个理由是对的吗?这是唯一的原因吗?
【问题讨论】:
-
为什么不写
rvalue.swap(v)? -
@KerrekSB 对,如果我可以写
rvalue.swap(v),为什么我不能写相反的?swap操作是可交换的,所以我希望它可以通过两种方式访问。 -
成员函数并不是真正可交换的。