У меня есть программа приведенной нижеПросьба уточнить понятие Левое и правое здесь
#include<stdio.h>
int main()
{
int i=5;
(++(++i));
}
Эта программа отлично компилируется в C++, но не в с. Я тоже не мог понять. Но я пробовал читать и искать и обнаружил, что это потому, что оператор preincrement возвращает rvalue в c и lvalue в C++.
Если я меняю (++(++i))
на (++(i++))
, то компиляция завершится с ошибкой как в c, так и в C++, потому что пост-инкремент всегда возвращает rvalue.
Даже после некоторого чтения я не вижу четкого представления о том, что именно означает значение lvalue и rvalue. Может кто-нибудь объяснить мне в непрофессиональных терминах, что это такое?
'lvalue' - это то, что можно назначить. 'rvalue' - это то, что можно назначить. –
Не уверен, что это слишком широкий, чтобы быть дубликатом, но вы можете найти ответ здесь: http://stackoverflow.com/questions/3601602/what-are-rvalues-lvalues-xvalues-glvalues-and-prvalues – juanchopanza
Чтобы взять 'int i = 5;' в качестве примера: 'i' является lvalue, потому что он может стоять слева от' = '. 5 не является lvalue, поэтому вы не можете писать '5 = i;' (и есть prvalue, xvalues и т. Д.) – deviantfan