xvalues不是glvalues还是rvalues?

时间:2017-06-30 14:35:27

标签: c++

我读到了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)

并记住这张图表

Expression type chart

我很困惑。

如果 glvalue 是左值或x值且右值是prvalue或xvalue,那说{{1}是不对的是一个glvalue而不是说也是一个右值?与g()相同。

上述代码的版本如下:

std::move(i)

至于标准所说的内容(我只引用最相关的部分):

  

一个右值(所谓的,历史上,因为右值可能会出现   赋值表达式的右侧是xvalue

  

glvalue(“generalized”左值)是左值或x值。

当然,我可能是错的。如果是这样,请帮我一点:)

2 个答案:

答案 0 :(得分:5)

  

如果glvalue是左值或者xvalue而rvalue是prvalue还是xvalue,那么说g()是一个glvalue而不说它也是一个rvalue是不是错了?

如果g() xvalue ,那么它既是 glvalue 又是 rvalue

答案 1 :(得分:3)

据我所知here

  • glvalue == 有身份
  • rvalue == 可以从 移动。

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

  • 可以从
  • 移动
  • 具有身份