理解const运算符

时间:2015-05-27 16:14:04

标签: c++ const

我正在阅读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!

他说这真的很奇怪,但我不明白为什么。对operator=的结果a*b的调用有什么问题?

2 个答案:

答案 0 :(得分:7)

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

然而,它的奇怪之处并不一定能证明增加更多的怪异来防止它。在现代C ++中,返回像这样的const对象是一个坏主意,因为它会禁止移动语义。

答案 1 :(得分:2)

对于将在语句末尾(即;)处被破坏的对象调用operator =有什么不对或奇怪。