【问题标题】:How does return work in the code given below?return 如何在下面给出的代码中工作?
【发布时间】:2014-07-20 08:35:37
【问题描述】:
Distance operator- ()  
{
 feet = -feet;
 inches = -inches;
 return Distance(feet, inches);
}

我正在尝试学习运算符重载。上面的代码用于重载“-”运算符。但是我无法理解 return 语句在这里是如何工作的。究竟会发生什么?这里的对象是怎么返回的?

上面的代码运行良好,但是写在下面这个语句的代码却没有。这段代码有什么错误?

Distance operator- ()
{
    Distance d;

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

    return d;
}

【问题讨论】:

  • @puppy:'距离(英尺,英寸);'的目的是什么?它到底有什么作用?
  • 这也是非常糟糕的代码。一元否定不应改变操作数。
  • 这与return无关。
  • @user3734204:如果返回 4,则返回一个临时 int(在堆栈上)。如果您返回Distance(feet,inches),您将返回一个使用它的构造函数创建的临时距离对象,该对象接受两个数字。这并不复杂,请阅读 C++ 书籍。
  • @user3734204:您的第二个代码中的d 是什么?

标签: c++ operator-overloading


【解决方案1】:

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

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

“返回”语句的行为“好像”是将新创建的距离复制回调用者,尽管“返回值优化”意味着实际上不需要执行复制。所以你可以把它想象成直接在调用点用两个参数(-feet, -inches)构造一个Distance。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多