不是xvalues既是glvalues又rvalues?
我读到这个答案引起了我的注意的部分是这样的:
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是一个左值或一个xvalue,并且一个右值是一个prvalue或者一个xvalue,那么说g()
是一个glvalue并不是说它也是一个右值? 与std::move(i)
。
我的上述代码版本是什么样的:
h() // rvalue (prvalue)
g() // glvalue and rvalue (xvalue)
f() // glvalue (lvalue)
i // glvalue (lvalue)
*p // glvalue (lvalue)
std::move(i) // glvalue and rvalue(xvalue)
至于标准说什么(我只引用最相关的部分):
一个右值(所谓的,历史上,因为右值可能出现在赋值表达式的右侧)是一个xvalue
和
一个glvalue(“广义”左值)是一个左值或一个xvalue。
当然,我可能是错的。 如果是这样,请帮我一下:)
如果一个glvalue是一个左值或一个xvalue,并且一个右值是一个prvalue或者一个xvalue,那么说g()是一个glvalue并不是说它也是一个右值?
是。
如果g()
是一个xvalue,那么它就是一个glvalue和一个右值。
正如我从这里理解的那样
所以你的分析是正确的,因为一个xvalue