Dai un'occhiata alla precedenza dell'operatore.
Senza un esplicito ()
il codice si comporta come
(a >= 5 ? b = 100 : b) = 200;
Il risultato di un'espressione ?:
non è un lvalue modificabile[#] e quindi non possiamo assegnare i valori ad esso.
Inoltre, degno di menzione, come da regola c
sintassi,
assegnazione è mai permesso di apparire sul lato destro di un operatore condizionale
Relared Riferimento: C precedence table.
OTOH, In caso di c++
, ben,
dell'operatore condizionale ha la stessa precedenza assegnazione.
e sono raggruppati da destra a sinistra, in sostanza, rendendo il codice si comportano come
a >= 5 ? (b = 100) : (b = 200);
Quindi, il codice funziona bene in caso di c++
[#] - Come da capitolo 6.5.15, nota in calce (12), C99
standard,
Un'espressione condizionale non produce un lvalue.
fonte
2015-02-05 05:56:41
wow, ora questa domanda è quasi un duplicato esatto, non solo un possibile. Tutte le domande sono quasi uguali anche se i voti sono abbastanza simili! (Wooho ha ottenuto -3 bello) – Rizier123