我读到了answer引起我注意的部分是:
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 是左值或x值且右值是prvalue或xvalue,那说{{1}是不对的是一个glvalue而不是说也是一个右值?与g()
相同。
上述代码的版本如下:
std::move(i)
至于标准所说的内容(我只引用最相关的部分):
一个右值(所谓的,历史上,因为右值可能会出现 赋值表达式的右侧是xvalue
和
glvalue(“generalized”左值)是左值或x值。
当然,我可能是错的。如果是这样,请帮我一点:)
答案 0 :(得分:5)
如果glvalue是左值或者xvalue而rvalue是prvalue还是xvalue,那么说g()是一个glvalue而不说它也是一个rvalue是不是错了?
是
如果g()
是 xvalue ,那么它既是 glvalue 又是 rvalue 。
答案 1 :(得分:3)