我看到了运算符*的以下实现,如下所示:
class Rational {
public:
Rational(int numerator=0, int denominator=1);
...
private:
int n, d; // numerator and denominator
friend const Rational operator*(const Rational& lhs, const Rational& rhs)
{
return Rational(lhs.n * rhs.n, lhs.d * rhs.d);
}
};
我在这里有两个问题:
答案 0 :(得分:12)
因此您无法执行Rational a, b, c; (a * b) = c;
。
没有
答案 1 :(得分:10)
请注意,返回const Rational
而不是Rational
不仅可以防止无意义的分配,还可以移动语义(因为Rational&&
不会绑定到const Rational
),因此不建议使用再用C ++ 0x。
Scott Meyers就此事写了note:
声明按值函数返回值const将 防止它们被绑定到C ++ 0x中的右值引用。 因为右值参考旨在帮助改进 C ++代码的效率,重要的是采取 考虑到const返回值的相互作用 和rvalue引用的初始化时 指定功能签名。