Рейтинг:
10
OriginalGriff
Приоритет оператора-это проблема:
i == 5 ? (b = 2) : (b = 4);
Но это очень плохо написано и мало что дает.
Вместо этого попробуйте это:
b = i == 5 ? 2 : 4;
что делает то же самое гораздо более читабельно!
Member 13922884
Хорошо, Спасибо !!
OriginalGriff
Всегда пожалуйста!
Member 13922884
b=i==5?2:4; Мне понятно. Сначала вычислялся тернарный оператор, а затем его значение передавалось в b.
Но как скобки помогают в приведенном выше утверждении?
Я знаю,что тернарный оператор имеет более высокий приоритет, чем оператор присваивания. Но разве b=7 не равно (b=7).
OriginalGriff
Потому что компилятор видит вашу версию так:
(i==5?b)=(2:b)=4;>/pre>
And goes "Eh? You what? That isn't an LValue!"
The left hand side of <code>a = b </code> must be an LValue - a value that can be assigned to, not a constant, or a result.
Member 13922884
Хорошо. Спасибо снова.
Member 13922884
главный ()
{
int a=10,b=0,c=7;
Если (a?b:c==0)
Printf ("1");
Если ((a?b:c)==0)
Printf ("2");
}
В этой программе скобки используются для вычисления тернарного оператора перед оператором"==". Так что здесь я могу понять использование функции (). Но не в приведенной выше программе.