假设我们有一个功能:
struct A {
int m;
};
A&& f();
据我所知:
f();
f().m;
都是xvalue。但为什么?他们为什么不prvalue?我有点困惑。
答案 0 :(得分:2)
因为您是从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
继承了较早的子表达式的值类别,这对于成员访问是正常的。