Lvalue (locator value) — выражение, которое имеет идентифицируемую область памяти. Это объект, который сохраняется за пределами одного выражения. Пример: переменная, разыменователь указателя *p.
Rvalue (right value) — выражение, которое не имеет постоянного адреса. Это временный объект, который существует только в пределах выражения. Пример: литерал 10, результат арифметической операции a + b, временный объект, возвращаемый функцией по значению.
Основные отличия:
| Признак | Lvalue | Rvalue |
|---|---|---|
| Адресность | Можно взять адрес (&lvalue) | Нельзя взять адрес (&rvalue - ошибка компиляции) |
| Присваивание | Может быть слева от оператора = | Не может быть слева от оператора = |
| Продолжительность жизни | Сохраняется за пределами выражения | Существует только в пределах выражения |
Примеры:
cpp