例如:
class Rational
{
public:
const Rational operator*(Rational){ return Rational(); }
}
在this回答中提到过,但它并没有解释它究竟如何影响移动语义。你不能举一些例子吗?
答案 0 :(得分:6)
考虑一下:
Rational a, b, c;
a = b*c;
如果operator*
返回非const Rational
,则b*c
的返回值可以移动到a
,作为值不是const
,可以修改。
operator=(Rational&&)
如果operator*
返回const Rational
,则b*c
的返回值无法移动到a
,因为值为{ {1}}并且无法修改;相反,它必须复制到const
。将调用复制赋值运算符a
。
如果operator=(const Rational&)
复制费用昂贵但移动成本低,那么返回Rational
的效率低于返回非const const Rational
。