lvalue to rvalue conversion

186
17 октября 2018, 17:50

Что такое lvalue to rvalue conversion? В этой статье непонятно следующее:

Очевидно, что если мы будем использовать любое из приведенных ранее lvalue-выражений в контексте, требующем значения объекта (например, в правой части операции присваивания), использование компилятором адресов будет ошибкой. Т.е., хотя выражение i является lvalue ("адрес и значение"), компилятор должен использовать соответствующее rvalue ("значение"). В терминах стандарта C++ это называется преобразованием lvalue к rvalue (lvalue-to-rvalue conversion).

Что этим хотел сказать автор?

Answer 1

Ну примерно...

Смотрите, переменная как таковая является lvalue -

int i;
i = 4;

Здесь de facto используется адрес переменной i - куда записать значение 4.

int i, j;
i = 4;
j = i;

А что теперь? Теперь в первом присваивании i выступает как lvalue - т.е. используется как указание на место в памяти, а во втором - уже как rvalue - не как указание на место в памяти, а как значение, в этом месте хранящееся.

Т.е. из lvalue получено rvalue. Т.е. компилятор преобразовал lvalue в rvalue - выполнил lvalue-to-rvalue conversion.

Так более-менее понятно или нужно еще поговорить?..

Answer 2

Все очень просто и нужно внимательно прочитать выше в статье, что написано.

rvalue - это только значение (оно не имеет адреса) lvalue - это нечто, что обладает и значением и адресов.

В случае примера

int j; int i; j = i;

обе переменные i и j могут быть lvalue (т.е. могут находится слева от оператора присваивания), но в примере от i нам нужно только значение, поэтому lvalue преобразуется в rvalue.

READ ALSO
Qt Android в Linux

Qt Android в Linux

Можно ли писать приложения под Android на c++ с qt в Linux и какие для этого нужны компоненты?

159
Реализация архитектуры приложения MVP

Реализация архитектуры приложения MVP

Представление строит свой презентер, презентер получает ссылку на IView и строит свою модельВопрос: где строить подчиненные IView, в презентере...

164
Ссылка на реализацию без экземпляра

Ссылка на реализацию без экземпляра

Начал изучать книгу Эрика и Элизабет Фримен Паттерны проектированияПытаюсь написать на C++ архитектуру из первой главы

224