了解 const 运算符

Understanding const operator

我正在阅读 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++ 中,像这样 return 一个 const 对象是个坏主意,因为它会抑制移动语义。

错误或奇怪的是 operator= 是在一个对象上调用的,该对象将在语句结束时(即在 ; 处)被破坏。