“xvalue有身份”是什么意思?

时间:2018-06-10 12:09:13

标签: c++ c++11 move-semantics xvalue

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

Stroustrup的explained类似于(im category):“它是一个值,它具有标识,但可以从”移动“。

另一个来源,  cppreference解释说:

  

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

xvalueglvalue,因此xvalue的陈述也是如此。

现在,我认为如果xvalue具有身份,那么我可以检查两个xvalue是否引用同一个对象,因此我采用xvalue的地址。事实证明,这是不允许的:

int main() {
    int a;
    int *b = &std::move(a); // NOT ALLOWED
}

xvalue有身份是什么意思?

1 个答案:

答案 0 :(得分:5)

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

  

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

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

int &&r = std::move(a);
int *p = &r;  // OK