lvalue — has identity, can appear on left side. rvalue — temporary, no identity.
lvalue:
1int x = 10; // x is lvalue2int& ref = x; // ref is lvalue3int* ptr = &x; // OK — has address
rvalue:
1int x = 10; // 10 is rvalue2int y = x + 5; // x + 5 is rvalue3std::string("hi"); // rvalue
C++11 extended values:
xvalue (expiring value):
std::move(x) returns xvalue.glvalue (generalized lvalue):
prvalue (pure rvalue):
Reference types:
int& — lvalue reference.int&& — rvalue reference (C++11).