Distance operator- ()
{
feet = -feet;
inches = -inches;
return Distance(feet, inches);
}
我正在尝试学习运算符重载。上面的代码用于重载' - '运算符。但是我无法理解,返回声明如何在这里起作用。究竟发生了什么?对象是如何返回的?
上面的代码运行正常,但是本声明下面写的代码没有。这段代码中的错误是什么?
Distance operator- ()
{
Distance d;
d.feet=(-feet);
d.inches=(-inches);
return d;
}
答案 0 :(得分:1)
首先,该方法应该是const。它是一元否定运算符,它应该返回其操作数的“负”版本(foo
中的-foo
)。
返回负面版本的最简单方法是创建一个新实例,这就是你的代码所做的:它构造一个Distance
对象并使用操作数的否定值返回它(可能是也是Distance
实例。
“return”语句表现为“好像”将新创建的Distance复制回调用者,尽管“返回值优化”表示不需要实际执行复制。因此,您可以将其视为直接在呼叫站点使用两个参数(-feet, -inches)
构建距离。