- 在C++11中,如果赋值运算符的右边是一个右值,那么当对象支持移动操作时我们能够自动地避免复制。如果对象有名字,那么它就是一个左值。
void swap(double & x,double & y)
{
double tmp=x;
x=y;
y=tmp;
}
void swap(vector& x,vector& y)
{
vector tmp=x;
x=y;
y=tmp;
}
通过3次复制的交换
void swap(vector& x,vector& y)
{
vector tmp=static_cast<vector&&>(x);
x=static_cast<vector&&>(y);
y=static_cast<vector&&>(tmp);
}
void swap(vector& x,vector& y)
{
vector tmp=std::move(x);
x=std::move(y);
y=std::move(tmp);
}
通过3次移动进行交换,第一种交换通过强制类型转换实现,第二种交换使用的是std::move