繁体   English   中英

返回表达式是否被视为 c++ 中的临时 object?

[英]Is the return expression treated as a temporary object in c++?

class elem
{
public:
    elem()
    {
    }
    elem(elem &)
    {
    cout << 222222 << endl;
    }  
    elem(elem &&)
    {
    cout << 111111 << endl;
    }
};

elem fun()
{
    elem e;

    elem f(e);

    return e;
}

void main()
{
    fun();
}

Output:

22222

11111

我的困惑:

当我在fun返回一个左值时,为什么fun不调用复制构造函数而是移动构造函数? 'e' 什么时候在返回表达式中变为右值?

注意:我已经关闭了复制省略。

如果您在 function 中声明一个局部变量并将其从 function 中返回,则它是一个右值。 还有一条绑定规则说……“移动构造函数中的右值引用优于复制构造函数中的 const 左值引用——这些是将表达式值绑定到引用的规则。 如果移动构造函数不可用,则选择第二个首选项 - 复制构造函数”。 正如@Olef 的评论,另请参见Automatic move from local variables and parameters

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM