Dipende.
Se &&
è il solito operatore logico di cortocircuito, allora va bene perché c'è un punto di sequenza. array[x]
utilizzerà il nuovo valore.
Se &&
è un operatore sovraccarico definito dall'utente (o libreria), non vi è alcun cortocircuito né garanzia di un punto di sequenza tra la valutazione di x--
e la valutazione di array[x]
. Questo sembra improbabile dato il tuo codice, ma senza contesto non è possibile dirlo con certezza. Penso che sia possibile, con un'attenta definizione di array
, organizzarlo in questo modo.
Ecco perché è quasi sempre una cattiva idea sovraccaricare operator&&
.
A proposito, if ((x > 0) && array[--x])
ha un effetto molto simile (anche in questo caso, supponendo che nessun operatore sovraccarichi gli imbrogli), e secondo me è più chiaro. La differenza è se x
decrementa o meno 0, su cui è possibile o meno fare affidamento.
fonte
2010-10-28 15:43:41
Ricordarsi di mantenere pulito il proprio codice affinché altri possano leggerlo, anche se è ben definito può introdurre un problema se qualcuno successivamente modifica o aggiunge all'espressione. Solo il mio 2c –
Anche se potrebbe essere ben definito, non dovresti usare questo tipo di codice. Puoi capirlo mentre lo scrivi, ma il prossimo non lo può fare. – codymanix
questo codice non è poi così male dopo tutto. ho visto un codice peggiore nel kernel di Linux: D – knittl