here弄清楚

  • “具有身份”:地址,指针,用户可以确定两个副本是否相同。
  • xvalue:具有标识,可以从(例如,将左值强制转换为右值引用的结果)移动。

  • here弄清楚

    以下表达式是xvalue表达式:
    3. a.m,对象表达式的成员,其中a是一个右值,m是非引用类型的非静态数据成员;

    here举一个例子
    struct X { int n; };
    
    X{4};                // prvalue: does not have an identity
    
    X{4}.n;              // xvalue: does have an identity and denotes resources
                         // that can be reused
    

    但是,当我尝试使用&cout的地址X{4}.n时,编译器拒绝进行编译。
    cout << &X{4}.n << endl;    // error C2102:  '&' requires l-value
    

    这是否意味着我永远无法获得xvalue的地址?

    最佳答案

    标准是这样的:[expr.unary.op]/3



    因此,不能,您不能使用&运算符获取右值的地址。

    关于c++ - “xvalue has identity”,为什么我不能数它地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59332607/

    10-10 12:46