我正在阅读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
的调用有什么问题?
答案 0 :(得分:7)
a*b
的结果是一个临时值,它将在语句结束时消失。分配给它会很奇怪,因为在分配之后你将无法对它做任何事情。
然而,它的奇怪之处并不一定能证明增加更多的怪异来防止它。在现代C ++中,返回像这样的const
对象是一个坏主意,因为它会禁止移动语义。
答案 1 :(得分:2)
对于将在语句末尾(即;
)处被破坏的对象调用operator =有什么不对或奇怪。