操作溢出不起作用c ++

Rog*_*gue 0 c++ operator-overloading

我构建了一个映射有理数的类,我想通过标量操作溢出来实现乘法,类似于:

Rational &operator*(Rational const& a, double lambda)
{
    Rational r(a._num * lambda, a._den);
}
Run Code Online (Sandbox Code Playgroud)

_num_den是有理数的分子和分母.

当我跑步时cout << r * 45.2;,我明白了-858993460/4389064.应该注意的operator<<是,在其他情况下工作正常Rational.

它怎么可能不起作用?谢谢 :)

Dra*_*rgy 6

Rational & - 您将返回对临时(未定义行为)的引用以及未能返回它.你需要:

Rational operator*(Rational const& a, double lambda) {
    return Rational(a._num * lambda, a._den);
}
Run Code Online (Sandbox Code Playgroud)

我还建议您注意编译器警告.你原来的代码应该在正常的编译器上调用多个代码.


wel*_*urm 5

您不会从该函数返回任何内容.并且您不能返回对局部变量的引用,因此您应该将返回类型更改为Rational(删除&)

此外,它被称为"运算符重载"