为什么函数调用是xvalue(如果返回类型为rvalue)

Why a function call is an xvalue (if return type is an rvalue)?

本文关键字:返回类型 rvalue 如果 函数调用 xvalue 为什么      更新时间:2023-10-16

假设我们有一个函数:

struct A {
    int m;
};
A&& f();

据我所知:

f();
f().m; 

都是xvalue。但为什么?他们为什么不是prvalue?我有点困惑。

,因为您是从f返回的,而不是通过值返回。这意味着A的寿命比f()更长,例如

A&& f()
{
     static A res;
     return std::move(res);
}

A global;
A&& f()
{
     return std::move(global);
}

但不是

A&& f()
{
     return {}; // dangling reference
}

f().m;中,m的使用继承了早期子表达的值类别,作为成员访问的正常值。