c++ - 操作溢出不起作用c++

标签 c++ operator-overloading

<分区>

我构建了一个类映射有理数,我想通过标量运算溢出来实现乘法,类似这样:

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);
}

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

关于c++ - 操作溢出不起作用c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30013917/

相关文章:

c++ - 如何调用矩阵调色板API

c++在尝试重载下标运算符时出现转换错误

c++ - 当 operator& 重载时,如何可靠地获取对象的地址?

c++ - 在qt/linux中如何获取ip地址?

C++ 为什么 operator-> 会中断嵌套的 operator() 调用?

c++ - 如何通过指针简化重载下标运算符的使用?

c++ - unique_ptr vector 的赋值运算符

c++ - 运算符重载非成员函数?

c++ - 错误:__cxxabiv1::__si_class_type_info 的 libc++abi.dylib`vtable

c++ - 如何使用分支逻辑构造不可变数据类型的实例?