返回如何在下面给出的代码中工作?

时间:2014-07-20 08:35:38

标签: c++ operator-overloading

Distance operator- ()  
{
 feet = -feet;
 inches = -inches;
 return Distance(feet, inches);
}

我正在尝试学习运算符重载。上面的代码用于重载' - '运算符。但是我无法理解,返回声明如何在这里起作用。究竟发生了什么?对象是如何返回的?

上面的代码运行正常,但是本声明下面写的代码没有。这段代码中的错误是什么?

Distance operator- ()
{
    Distance d;

    d.feet=(-feet);
    d.inches=(-inches);

    return d;
}

1 个答案:

答案 0 :(得分:1)

首先,该方法应该是const。它是一元否定运算符,它应该返回其操作数的“负”版本(foo中的-foo)。

返回负面版本的最简单方法是创建一个新实例,这就是你的代码所做的:它构造一个Distance对象并使用操作数的否定值返回它(可能是也是Distance实例。

“return”语句表现为“好像”将新创建的Distance复制回调用者,尽管“返回值优化”表示不需要实际执行复制。因此,您可以将其视为直接在呼叫站点使用两个参数(-feet, -inches)构建距离。