example4_xvalues_vs_lvalues_and_prvalues.cpp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#include <iostream>

int main() {
    int a = 5;            // 'a' is an lvalue
    int b = a + 10;       // 'a + 10' is a prvalue

    int&& r = std::move(a);  // 'std::move(a)' is an xvalue

    int* p1 = &a;         // OK: 'a' is an lvalue
    // int* p2 = &(a + 10);  // Error: 'a + 10' is a prvalue, cannot take its address
    int* p3 = &r;         // OK: 'r' is an xvalue, can take its address

    r = 20;               // OK: 'r' is modifiable because it's a glvalue

    return 0;
}
Back to xvalue