example3_glvalues_vs_prvalues.cpp

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

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

    int* p = &a;          // OK: 'a' is a glvalue
    // int* q = &(a + 10); // Error: 'a + 10' is a prvalue, cannot take its address

    int&& r = a + 10;     // 'a + 10' is a prvalue, but 'r' is an xvalue (and thus a glvalue)
    r = 20;               // OK: 'r' is modifiable because it's a glvalue

    return 0;
}
Back to glvalue