我正在阅读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!
Run Code Online (Sandbox Code Playgroud)
他说这真的很奇怪,但我不明白为什么.operator=对结果的调用有什么问题a*b?
结果a*b是一个临时值,它将在语句结束时消失.分配给它会很奇怪,因为在分配之后你将无法对它做任何事情.
然而,这很奇怪的事实并不一定有理由增加更多的怪异来防止它.在现代C++中,返回这样的const对象是一个坏主意,因为它会禁止移动语义.
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |