首页 > 解决方案 > 如何在一个表达式中生成并返回结果?

问题描述

我有一个class类似的:

class Frac
{
    int numer;
    int denom;
public:
    Frac &simplify();

    Frac(int &&num, int &&den) : numer { num }, denom { den }
    {
        simplify();
    }

    Frac operator*(const int &rhs)
    {
        Frac result = { numer * rhs, denom };
        return result.simplify();
    }
}

但是,我不喜欢result在重载时使用中间体*

理想情况下,我想做这样的事情:

Frac operator*(const int &rhs)
{
    return { numer * rhs, denom }.simplify();
}

但这不起作用;它构造 astd::initializer_list<int>而不是 aFrac并且您不能调用成员函数。在 CI 中可以使用复合文字来做到这一点,但这些在标准 C++ 中不可用。

如何在一个表达式中生成并返回结果?

标签: c++

解决方案


由于您已经simplify()在构造函数中调用,因此您只需要调用构造函数本身,并返回它创建的对象:

Frac operator*(const int &rhs)
{
    return Frac(numer * rhs, denom);
}

如果您稍后决定将构造函数更新为不再调用simplify(),您仍然可以simplify()显式调用通过调用构造函数创建的对象:

Frac operator*(const int &rhs)
{
    return Frac(numer * rhs, denom).simplify();
}

推荐阅读