如何使返回值const影响移动语义?

时间:2015-05-28 05:20:41

标签: c++ move-semantics

例如:

class Rational
{
public: 
    const Rational operator*(Rational){ return Rational(); }
}

this回答中提到过,但它并没有解释它究竟如何影响移动语义。你不能举一些例子吗?

1 个答案:

答案 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