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