Это тройной оператор: (statement)?(if true):(if false)
справа?В тройном операторе можно выполнить два операнда в истинном значении?
но почему этот код не работает должным образом?
int a=10, b=20;
(a<b)? a++, b++ : a--, b--;
Это тройной оператор: (statement)?(if true):(if false)
справа?В тройном операторе можно выполнить два операнда в истинном значении?
но почему этот код не работает должным образом?
int a=10, b=20;
(a<b)? a++, b++ : a--, b--;
Оператор запятой имеет более низкую точность, чем тернарный оператор. Поскольку двоеточие не может стать сиротой, вы уходите с первой запятой, но не второй. Компилятор понимает код как:
((a<b)? a++, b++ : a--), b--;
Вы должны использовать скобки для группы, по крайней мере второе выражение запятой, и для удобства чтения я сделал бы так:
(a<b)? (a++, b++) : (a--, b--);
Спасибо. Я понял! – user7394178
условный оператор является определены в C++ как
conditional-expression:
logical-or-expression
logical-or-expression ? expression : assignment-expression
Так это выражение утверждение
(a<b)? a++, b++ : a--, b--;
эквивалентно
((a<b)? a++, b++ : a--), b--;
, потому что выражение присваивания имеет более высокий приоритет, чем выражение запятой.
Вы должны написать по крайней мере, как
(a<b)? a++, b++ : (a--, b--);
или для ясности, как
(a < b)? (a++, b++) : (a--, b--);
принять во внимание, что есть разница между условным оператором в C++ и условного оператора в С. В C условный оператор определен как
conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
Это означает для примера е, что эта запись в C+++
(a < b)? a = b : b = a;
эквивалентно
((a < b)? a = b : b = a);
в то время как в C эта запись эквивалентна
((a < b)? a = b : b) = a;
и C компилятор выдаст сообщение об ошибке.
С другой стороны, эта запись в C++
((a < b)? a = b : b) = a;
действует. :)
Спасибо. Я понял! – user7394178
Оператор старшинство снова ... Посмотрите на него. И определите * правильно * в следующий раз. – LogicStuff
Возможный дубликат [Что является преимуществом оператора запятой внутри условного оператора в C++?] (Http://stackoverflow.com/questions/12136156/whats-the-precedence-of-comma-operator-inside-conditional-operator-in -c) – LogicStuff
Написание тройки, как это только приводит к путанице, и на самом деле не более читабельны или быстрее писать, чем просто 'else-if', так как для каждого результата есть два задания.В принципе, вам нужно будет включить скобки, хотя вы не должны писать троицу в первую очередь (imo). – George