什么意思"xvalue有身份"?

gez*_*eza 7 c++ move-semantics xvalue c++11

C++ 11引入了新的值类别,其中之一就是xvalue.

它被Stroustrup 解释为(im类别):"它是一个值,它具有身份,但可以从"移动".

另一个来源, cppreference解释说:

glvalue是一个表达式,其评估决定了对象,位域或函数的身份;

并且xvalue是一个glvalue,所以这个陈述也是如此xvalue.

现在,我认为如果有一个xvalue身份,那么我可以检查两个xvalues是否引用同一个对象,所以我取一个地址xvalue.事实证明,不允许:

int main() {
    int a;
    int *b = &std::move(a); // NOT ALLOWED
}
Run Code Online (Sandbox Code Playgroud)

xvalue具有身份意味着什么?

Ker*_* SB 5

xvalue确实有一个标识,但是在语言中有一个单独的规则,一元&表达式需要一个左值操作数.来自[expr.unary.op]:

一元运算&符的结果是指向其操作数的指针.操作数应为左值[...]

通过将xvalue绑定到引用,可以在执行rvalue-to -valval转换后查看xvalue的标识:

int &&r = std::move(a);
int *p = &r;  // OK
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是如果将纯右值分配给 `const &`,您可以对纯右值执行“相同”操作。并且纯右值没有身份。 (3认同)