Назад к вопросам
Junior
171
questionbank
В чем разница между rvalue и lvalue?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Lvalue (locator value) — выражение, которое имеет идентифицируемую область памяти. Это объект, который сохраняется за пределами одного выражения. Пример: переменная, разыменователь указателя *p.
Rvalue (right value) — выражение, которое не имеет постоянного адреса. Это временный объект, который существует только в пределах выражения. Пример: литерал 10, результат арифметической операции a + b, временный объект, возвращаемый функцией по значению.
Основные отличия:
| Признак | Lvalue | Rvalue |
|---|---|---|
| Адресность | Можно взять адрес (&lvalue) |
Нельзя взять адрес (&rvalue - ошибка компиляции) |
| Присваивание | Может быть слева от оператора = |
Не может быть слева от оператора = |
| Продолжительность жизни | Сохраняется за пределами выражения | Существует только в пределах выражения |
Примеры:
// Переменная 'a' - lvalue
int a = 5;
// Литерал '10' - rvalue
a = 10;
// Результат 'a + 1' - rvalue
int b = a + 1;
// '*ptr' - lvalue, если ptr - указатель на lvalue
int* ptr = &a;
*ptr = 12;
// Временный объект, возвращаемый функцией - rvalue
std::string create_string() {
return "temporary"; // Возвращает временный объект
}
std::string s = create_string(); // s - lvalue
// &create_string() - ошибка компиляции