0

假设我们有一个函数:

struct A {
    int m;
};

A&& f();

据我所知的表达式:

f();
f().m; 

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

4

1 回答 1

2

因为您是通过引用而不是值返回 from 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继承先前子表达式的值类别,作为成员访问的正常方式。

于 2019-05-24T11:03:39.430 回答