π§ What are lvalues and rvalues in C++?
πΉ lvalue (locator value)
β’ Has a name, an address, and can be assigned to
β’ Exists in memory (can appear on the left-hand side of
int x = 10; // 'x' is an lvalue
x = 20; // valid: lvalue can be assigned to
πΉ rvalue (read value)
β’ Temporary values
β’ Does not have a persistent address (cannot appear on LHS of assignment)
int x = 10 + 5; // '10 + 5' is an rvalue
int y = x * 2; // 'x * 2' is an rvalue
π§ͺ Letβs break it with some examples
int a = 5; // 'a' is an lvalue
int b = a; // 'a' is an lvalue, 'b' is lvalue, 'a' is used as rvalue here
int* p = &a; // Valid: lvalue has address
int* p2 = &(a + 1); // β Error: rvalue has no address
π Table: lvalue vs rvalue
| Feature | lvalue | rvalue |
|---|---|---|
| Has address | β | β (usually) |
| Assignable | β | β (can only assign from) |
| Temporary | β | β |
| Usage | Left side of = | Right side of = |
π Expressions That Return rvalues