首页 > 解决方案 > 是否将 r 值传递给返回它的函数在 C++ 中被认为是错误的?

问题描述

我想创建一个功能Service,使疲惫的手机充满活力并按如下方式返回。

在此处输入图像描述

写作

Phone p;
p = Service(p);

看起来不优雅所以我想写如下。

Phone& p = Service(Phone());

这样做会产生如下奇怪的输出。

Ctor
Dtor
Destroyed
Energy: 100%
Ending...

预期的输出是:

Ctor
Energy: 100%
Dtor
Destroyed
Ending...

问题

你能告诉我为什么会这样吗?

注意:我是 C++ 新手。

class Phone
{
private:
    int energy;
    bool destroyed = false;
public:
    Phone() : energy{ 0 } {
        cout << "Ctor" << endl;
    }
    ~Phone()
    {
        cout << "Dtor" << endl;
        if (destroyed == false)
        {
            cout << "Destroyed..." << endl;
            destroyed = true;
        }
    }

    void Energize() { energy = 100; }
    void Status() const
    {
        cout << "Energy: " << energy << "%" << endl;
    }
};


Phone& Service(Phone&& input)
{
    input.Energize();
    return input;
}


int main()
{
    Phone& p = Service(Phone());
    p.Status();

    cout << "Ending..." << endl;
}

标签: c++

解决方案


退回手机副本是没有意义的。所以只需将它作为参考传递并对其进行操作:

void Service(Phone& phone);
Phone p{};

Service(p);

推荐阅读