C++ 在下面给出的代码中,return是如何工作的?

C++ 在下面给出的代码中,return是如何工作的?,c++,operator-overloading,C++,Operator Overloading,我正在努力学习运算符重载。上述代码用于重载“-”运算符。然而,我无法理解返回语句在这里是如何工作的。到底发生了什么?这里的对象是如何返回的 上面的代码运行得很好,但是写在这条语句下面的代码运行得不好。这段代码中的错误是什么 Distance operator- () { feet = -feet; inches = -inches; return Distance(feet, inches); } 首先,方法应该是const。这是一元求反运算符,它应该返回其操作数的“负”版本(-fo

我正在努力学习运算符重载。上述代码用于重载“-”运算符。然而,我无法理解返回语句在这里是如何工作的。到底发生了什么?这里的对象是如何返回的

上面的代码运行得很好,但是写在这条语句下面的代码运行得不好。这段代码中的错误是什么

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

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

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


“return”语句的行为“就像”它将新创建的距离复制回调用方,尽管“return Value Optimization”意味着实际上不需要执行复制。因此,您可以将其视为使用两个参数直接在调用站点构建距离
(-feet,-inches)

@puppy:Distance(feet,inches);”的目的是什么?它到底做什么?这也是非常糟糕的代码。一元求反不应更改操作数。这与
返回无关。
@user3734204:如果返回4,则返回一个临时int(在堆栈上)。如果返回距离(英尺、英寸),则返回使用构造函数创建的临时距离对象,该对象包含两个数字。这不是复杂的东西,读一本C++的书。@ USER 73204:在第二个代码中,什么是<代码> D <代码>?
Distance operator- ()
{
    Distance d;

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

    return d;
}