C++ &引用;xvalue具有标识“0”;,为什么我能';这不是艾德里斯吗

C++ &引用;xvalue具有标识“0”;,为什么我能';这不是艾德里斯吗,c++,c++11,C++,C++11,弄清楚 “has identity”:地址、指针,用户可以确定两个副本是否相同 xvalue:具有标识,可以从(例如,将左值转换为右值引用的结果)移动 弄清楚 以下表达式是xvalue表达式: 3.a.m,对象表达式的成员,其中a为右值,m为非引用类型的非静态数据成员 举例说明 struct X { int n; }; X{4}; // prvalue: does not have an identity X{4}.n; // xval

弄清楚

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

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

    举例说明

    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
    

    cout以下是标准的内容:

    一元
    &
    运算符的结果是指向其操作数的指针。 操作数应为左值或限定id。

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

    根据,不能获取右值的地址。因为xvalue属于右值,所以不能获取其地址。