Aren't xvalues both glvalues and rvalues?
我读到这个答案,引起我注意的部分是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int i; int* p = &i; int& f(); int&& g(); int h(); h() // prvalue g() // glvalue (xvalue) f() // glvalue (lvalue) i // glvalue (lvalue) *p // glvalue (lvalue) std::move(i) // glvalue (xvalue) |
考虑到这个图表
我搞糊涂了。
如果glvalue是lvalue或xvalue,而rvalue是prvalue或xvalue,那么说
上面代码的我的版本是什么样子的:
1 2 3 4 5 6 7 | h() // rvalue (prvalue) g() // glvalue and rvalue (xvalue) f() // glvalue (lvalue) i // glvalue (lvalue) *p // glvalue (lvalue) std::move(i) // glvalue and rvalue(xvalue) |
至于标准的内容(我只引用最相关的部分):
An rvalue (so-called, historically, because rvalues could appear on
the right-hand side of an assignment expression) is an xvalue
和
A glvalue ("generalized" lvalue) is an lvalue or an xvalue.
当然,我可能错了。如果是,请帮我一点。)
If a glvalue is either an lvalue or an xvalue and an rvalue is either a prvalue or an xvalue, isn't it wrong to say that g() is a glvalue without saying that it is also an rvalue?
对。
如果
据我所知
- glvalue==具有标识和
- rValue==可以从移动。
所以您的分析是正确的,因为XValue
- 可以从和移动
- 具有身份。