不是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和一个右值。


正如我从这里理解的那样

  • glvalue == 有身份
  • rvalue == 可以从中移出

  • 所以你的分析是正确的,因为一个xvalue

  • 可以从移动
  • 有身份
  • 链接地址: http://www.djcxy.com/p/72997.html

    上一篇: Aren't xvalues both glvalues and rvalues?

    下一篇: lvalue to rvalue implicit conversion