St.*_*rio 2 c++ move-semantics
例如:
class Rational
{
public:
const Rational operator*(Rational){ return Rational(); }
}
Run Code Online (Sandbox Code Playgroud)
在这个答案中提到了它,但它没有解释它实际上如何影响移动语义.你不能举一些例子吗?
考虑一下:
Rational a, b, c;
a = b*c;
Run Code Online (Sandbox Code Playgroud)
如果operator*返回一个非const Rational,则返回值b*c可以被移动到a,因为该值不是const并且可以被修改.operator=(Rational&&)将调用移动赋值运算符.
如果operator*返回const Rational,则返回值b*c不能被移动到a,因为该值const,不能被修改; 相反,它必须被复制到a.operator=(const Rational&)将调用复制赋值运算符.
如果Rational复制昂贵但移动成本低,那么返回a const Rational比返回非const的效率低Rational.