【发布时间】:2018-03-13 17:15:03
【问题描述】:
我正在阅读 c++ 中的移动语义,并遇到以下示例作为动机:
template<class T>
void swap(T& a, T& b)
{
T tmp(std::move(a));
a = std::move(b);
b = std::move(tmp);
}
这里说如果 T 没有实现移动语义(在复制构造函数和赋值运算符中),那么 swap 将表现为“正常”的 swap:
template<class T>
void swap(T& a, T& b)
{
T tmp(a);
a = b;
b = tmp;
}
为什么这是真的?据说here(最后一段)因为std::move(b)是右值,所以我们在做a = std::move(b);时不能调用签名为Type& operator=(Type&)的赋值运算符。
【问题讨论】:
-
这就是为什么你应该使用
Type& operator=(const Type&)
标签: c++ c++11 move-semantics