Справка по C : Ошибка: значение lvalue требуется в качестве операнда приращения

#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)