返回并移动构造函数

时间:2015-03-06 01:56:16

标签: c++ c++11

struct CAT
{
    CAT(){cout<<"CAT()"<<endl;}
    CAT(const CAT& ){cout<<"CAT(const CAT&)"<<endl;}
    CAT(CAT&& ){cout<<"CAT(CAT &&)"<<endl;}
    void speak(){cout<<"speak()"<<endl;}
};


CAT f()
{
    CAT local_c;
    return local_c;
}

int main()
{
    CAT c = f();
    c.speak();
}

我使用-fno-elide-constructors编译代码来禁用g ++的返回值优化,因此我们可以观察代码中的所有操作。

这是输出:

CAT()
CAT(CAT &&)
CAT(CAT &&)
speak()

令我困惑的是第一个输出&#34; CAT(CAT&amp;&amp;)&#34;。我的理解是local_c是左值,所以当编译器创建内部临时CAT对象时,它应该使用CAT(const CAT&)而不是CAT(CAT&&),对吧?

0 个答案:

没有答案
相关问题