操作溢出不起作用C

Operation overflow not working c++

本文关键字:不起作用 溢出 操作      更新时间:2023-10-16

i构建类映射有理数,我想通过标量操作溢出实现乘法,类似的东西:

Rational &operator*(Rational const& a, double lambda)
{
    Rational r(a._num * lambda, a._den);
}

其中 _num_den是有理数的分子和分母。

运行cout << r * 45.2;时,我会得到-858993460/4389064。应该注意的是,operator<<Rational的其他实例上工作正常。

它如何无法正常工作?谢谢:)

Rational &-您正在返回对临时(未定义行为)的引用,并且未能返回。您需要:

Rational operator*(Rational const& a, double lambda) {
    return Rational(a._num * lambda, a._den);
}

我还建议注意您的编译器警告。您最初的代码应该在体面的编译器上调用多个。

您不会从该功能中返回任何内容。而且您无法返回对本地变量的引用,因此您可能应该将返回类型更改为Rational(删除&

另外,它被称为"操作员过载"

operator*()需要返回值。你不是。

呼叫者尝试使用不返回的函数的返回值的任何尝试。

另外,您的功能还会返回参考。这可能不是一个好主意。

您可能想做

之类的事情
Rational operator*(Rational const& a, double lambda)
{
    Rational r(a._num * lambda, a._den);
    return r;
}

请注意,返回类型是Rational,而不是参考。并返回r的值。

这假设您已经实现了用于创建r的构造函数,并且它按预期工作。您没有提供任何可以确认或否认该假设的信息。