理解const运算符

St.*_*rio 1 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!
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*our 7

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

然而,这很奇怪的事实并不一定有理由增加更多的怪异来防止它.在现代C++中,返回这样的const对象是一个坏主意,因为它会禁止移动语义.

  • @ St.Antario:因为对于像这样的类类型,`operator =()`是一个成员函数,你可以在_rvalues_上调用成员函数. (2认同)