理解const操作符

Understanding const operator

本文关键字:操作符 const 理解      更新时间:2023-10-16

我在读Scott Meyers的书时遇到了下面的例子:

class Rational { ... };
const Rational operator*(const Rational& lhs, const Rational& rhs);
Rational a, b, c;
...
(a * b) = c; // invoke operator= on the
// result of a*b!
他说这是一件很奇怪的事情,但我不明白为什么。在a*b的结果上调用operator=有什么问题?

a*b的结果是一个临时值,它将在语句结束时消失。给它赋值会很奇怪,因为赋值后你不能对它做任何事情。

然而,事实是它很奇怪并不一定证明添加更多的奇怪来防止它。在现代c++中,像这样返回const对象是一个坏主意,因为它抑制了move语义。

错误或奇怪的是,操作符=是在一个对象上调用的,该对象将在语句结束时被销毁(即在;处)。