Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设我们有一个函数:
struct A { int m; }; A&& f();
据我所知的表达式:
f(); f().m;
都是 xvalue。但为什么?为什么他们不是prvalue?我有点困惑。
因为您是通过引用而不是值返回 from f。这意味着A的寿命长于f(),例如
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继承先前子表达式的值类别,作为成员访问的正常方式。
f().m;
m