了解 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= 是在一个对象上调用的,该对象将在语句结束时(即在 ;
处)被破坏。
我正在阅读 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= 是在一个对象上调用的,该对象将在语句结束时(即在 ;
处)被破坏。