Вопрос Преобразования между lvalue и rvalue


yum

Пользователь
Форумчанин
Регистрация
30.11.2023
Сообщения
47
Репутация
5
Читал статью, про lvalue и rvalue
И в статье указывается вот такой код
Код:
int a = 1;        // a - lvalue
int b = 2;        // b - lvalue
int c = a + b;    // '+' требует rvalue, поэтому a и b конвертируются в rvalue
                  // и rvalue возвращается в качестве результата
В комментариях к коду указывается, то что a и b преобразуются в rvalue. Разве не результат выражение ( a + b ) будет rvalue ,а не a и b будут преобразованы в rvalue. Если это не так , объясните почему a и b преобразуются в rvalue, когда они имеют выделенное место в памяти
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 208
Да, всё-верно результат выражение ( a + b ) будет rvalue ,а не a и b будут преобразованы в rvalue.

В выражении int c = a + b;, переменные a и b действительно являются lvalue, поскольку они обозначают объекты, хранящиеся в памяти, к которым можно обратиться по адресу.

Однако, когда они используются в арифметической операции a + b, они не преобразуются в rvalue. Вместо этого, значения, хранящиеся в a и b, извлекаются и используются в вычислении выражения.

Результатом этой операции является временное значение, которое само по себе является rvalue, потому что оно не связано с конкретной, идентифицируемой локацией в памяти и представляет собой значение, которое может быть назначено другому объекту или использовано в другом выражении.
 
Верх Низ