Почему lvalue требуется в сокращенной форме if-else в части else при использовании оператора присваивания?
#include <stdio.h>
void main()
{
int k = 8;
int m = 7;
int z = k < m ? k = m : m++;
printf("%d", z);
k = 8;
m = 7;
z = k < m ? m++ : k=m;
printf("%d", z);
}
Выход
Compile Error:
main.c: In function 'main':
main.c:19:32: error: lvalue required as left operand of assignment
z = k < m ? m++ : k=m;
^
- Почему первое задание работает, а второе нет?
- И почему компилятор говорит, что требуется lvalue?
1 ответ
Решение
Из-за более высокого приоритета ?:
условный оператор по сравнению с =
z = k < m ? m++ : k=m;
Эквивалентно (или, скажем, анализировать как)
z = ((k < m ? m++ : k) = m);
// ^^^^^^^^^^^^^^^^
// expression = m
m
присваивается выражению, которое - Ошибка Lvalue.