好的,我正在阅读一本书,尝试学习C++运算符重载。我创建了一个BigInt类,它接受一个单独的int(最初设置为0)作为构造函数。我重载了+=方法,在以下代码中它可以正常工作:
BigInt x = BigInt(2);
x += x;
x.print( cout );
代码将输出4。然后,我正在使用以下代码重载全局运算符+:
BigInt operator+(const BigInt lhs, const BigInt rhs)
{
BigInt returnValue(lhs);
returnValue += rhs;
return returnValue;
}
这对以下代码也适用:
这也适用于以下代码:
BigInt x = BigInt(1);
BigInt y = BigInt(5);
BigInt z = x + y;
z.print();
这会打印出6。然而,当我尝试执行以下代码时,它就无法工作。该书解释得不是很清楚,并暗示它应该可以简单地工作。
BigInt x = BigInt(1);
BigInt z = x + 5;
z.print();
这将打印出1。我不确定z为什么是1,因为应该是6。我在网上和stackoverflow上搜索过,但没有找到其他人有完全像我这样的问题。有些接近,但答案并不适合。非常感谢任何帮助!
operator+
的参数应该通过const引用而不是按值传递,例如BigInt operator+(const BigInt& lhs, const BigInt& rhs)
。 - Tyler McHenry= BigInt(1)
而不是= 1
?如果您展示完整的类定义,我们可以更好地帮助您 :) - Johannes Schaub - litblhs
,并通过const引用传递rhs
(如果您将在函数内部复制lhs
,只需将该副本移动到接口即可。这将为编译器提供消除复制的机会,如果lhs
是临时的)。 - David Rodríguez - dribeas