Назад к вопросам
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() - ошибка компиляции