提问者:小点点

返回表达式在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();
}

输出:

22222

11111

我的困惑:

当我在fun中返回一个lvalue时,为什么fun不调用复制构造函数而是调用移动构造函数? 返回表达式中的“e”何时更改为rvalue?

注意:我已经关闭了复制选择。


共1个答案

匿名用户

如果在函数内声明一个局部变量并将其从函数中返回,则它是一个rvalue。 还有一条有约束力的规则说。。。 “移动构造函数中的r值引用比复制构造函数中的常量l值引用更可取-这些是将表达式值绑定到引用的规则。 如果移动构造函数不可用,则选择第二个首选项-复制构造函数“。 从@Olef的评论中也可以看到,自动从局部变量和参数移动。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(返回|表达式|c++|中|视为|临时|对象)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?