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

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

Stroustrup将它作为类似(im类别)的explained:“它是一个值,它具有身份,但可以从”移动“.

一个来源,
cppreference解释:

a glvalue is an expression whose evaluation determines the identity of an object,bit-field,or function;

而xvalue是一个glvalue,所以这个声明也适用于xvalue.

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

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

xvalue有身份是什么意思?

解决方法

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

The result of the unary & operator is a pointer to its operand. The operand shall be an lvalue […]

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

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

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...