в Тернарный оператор C/C++ на самом деле имеют тот же приоритет, что и операторы присваивания?
В ответе Лучиана Григора говорится, что такие случаи, как
a ? b : c = d
всегда будет выводиться как
a ? b : ( c = d )
потому что оба = и ?: ассоциируют справа налево, поэтому
in c++
k = 21 > 3 ? j = 12 : j = 10;
а также
k = 1 > 3 ? j = 12 : j = 10;
оба в порядке.
In C
k = 21 > 3 ? 12 : j = 10
возвращает ошибку
invalid lvalue in assignment.
Не должно выше выводиться как (и не возвращать ошибку)
k= 21 > 3 ? 12 : ( j = 10 )
Я предполагаю, что теперь он сгруппирован как
k = ( 21 > 3 ? 12 : j ) = 10
что дает ошибку, поскольку в C (не в C++) тернарный оператор не может возвращать lvalue. Может ли кто-нибудь сказать мне, как именно сгруппированы операторы в этом случае.
a ? b : c = d
различается в C и C++! В одномa ? b : (c = d)
, в другом(a ? b : c) = d
. - person Kerrek SB   schedule 01.07.2013k=(21>3?12:j=10)
- person David Rodríguez - dribeas   schedule 01.07.2013