#c #compiler-errors #lvalue #pre-increment #operands
#c #ошибки компилятора #Значение lvalue #предварительное увеличение #операнды
Вопрос:
Что здесь не так. Что означает ошибка: значение lvalue требуется в качестве операнда приращения? (ПРИМЕЧАНИЕ: это пример из учебника)
#include <iostream>
using namespace std;
int main()
{
int num1 = 0, num2 = 10, resu<
num1 ;
result = (num1 num2);
cout << num1 << " " << num2 << " " << resu<
return 0;
}
Комментарии:
1. Если ваша книга не использует это в качестве примера чего-то неправильного, книга сломана.
Ответ №1:
Оператор x
называется прединкрементным, а x
называется постинкрементным. Для обоих требуется изменяемая переменная lvalue в качестве операнда. В данном случае x
это значение lvalue.
Если у вас есть код y = x
, он имеет то же семантическое значение, что и
x = x 1;
y = x;
Таким образом, этот конкретный код (num1 num2)
фактически выдает ошибку, потому num1 num2
что не является допустимой изменяемой переменной, и семантика result = (num1 num2)
будет:
num1 num2 = (num1 num2) 1; // this is invalid
result = num1 num2;
Вы можете исправить это следующим образом:
int x = num1 num2;
result = x;
Или более короткая версия, которая дает тот же результат:
(result = num1 num2)