rvalue委托,或const成员函数的rvalue等价物

时间:2012-07-26 11:53:48

标签: c++ c++11 rvalue

struct that
{
    that &frob()
    {
        return *this;
    }
    that frob() const
    {
        return that(*this);
    }

    //that &&frob() && //<-called only if *this is an rvalue
    //{
    //    return move(*this);
    //}

    that()
    {
        // make things
    }
    that(const that &other)
    {
        // copy things
    }
    that(that &&other)
    {
        // move things
    }
};

显然上面评论中的函数不是合法的C ++,但我需要知道是否有办法实现这一点:

that().frob().frob().frob();

等等,每次拨打frob()都会有效地调用&#34;移动&#34;其版本。由于这是可以在编译时确定的,我无法想到它以某种形式存在的任何理由。

我可以这样写:

that &&frob(that &&t)
{
    return t;
}

哪会导致这个:

frob(frob(frob(that())));

阅读中有点烦人,并没有达到我的目标,即拼出东西&#34;与代表团合作。

2 个答案:

答案 0 :(得分:2)

如果您希望&&带注释的功能可以与其他人一起使用,则应该对其他功能使用&注释。

that &frob() &
{
    return *this;
}
that frob() const &
{
    return that(*this);
}

答案 1 :(得分:0)

不,无法确定对象是否是对象内的右值。您可以做的最好的事情是复制它const并移动它,如果不是:

that frob() const
{
    return *this;
}

that frob()
{
    return std::move(*this);
}

修改

进一步的研究显示你实际上是can,正如@Potatoswatter指出的那样,但是它被称为ref-qualification而不是注释。