🧠 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