C++11引入了新的价值类别,其中之一是xvalue。
它是Stroustrup的解释,类似于(im类别):“它是一个值,它具有标识,但可以从中移动”。
另一个消息来源,优先选择解释道:
glvalue是一种表达式,其计算结果决定了对象、位字段或函数的身份;
xvalue是一个glvalue,所以对于xvalue也是如此。
现在,我认为如果一个xvalue有标识,那么我可以检查两个xvalue是否引用同一个对象,所以我使用xvalue的地址。事实证明,这是不允许的:
int main() {
int a;
int *b = &std::move(a); // NOT ALLOWED
}xvalue有身份是什么意思?
发布于 2018-06-10 12:18:32
xvalue确实有一个标识,但是在语言中有一个单独的规则,即一元&-expression需要一个lvalue操作数。来自expr.unary.op
一元
&运算符的结果是指向其操作数的指针。操作数将是一个值..。
在执行rvalue到lvalue的转换之后,可以通过将xvalue绑定到引用来查看xvalue的标识:
int &&r = std::move(a);
int *p = &r; // OKhttps://stackoverflow.com/questions/50783525
复制相似问题