Effetti collaterali
L'ordine di valutazione delle espressioni è definito dall'implementazione specifica, ad eccezione di quando il linguaggio garantisce un determinato ordine di valutazione (come descritto in Precedenza e ordine di valutazione).Ad esempio, gli effetti collaterali si verificano nelle chiamate di funzione seguenti:
add( i + 1, i = j + 2 );
myproc( getc(), getc() );
Gli argomenti di una chiamata di funzione possono essere valutate in qualsiasi ordine.l'espressione i + 1 possono essere valutate prima i = j + 2, o i = j + 2 possono essere valutate prima i + 1.Il risultato è diverso in ogni caso.Inoltre, non è possibile garantire descritti i caratteri sono effettivamente passati a myproc.Poiché unario incrementare e operazioni di decremento include le assegnazioni, queste operazioni possono causare effetti collaterali, come illustrato nell'esempio seguente:
x[i] = i++;
in questo esempio, il valore di x che viene modificato sarà imprevedibile.Il valore di indice potrebbe essere il nuovo o valore precedente di i.Il risultato può variare in vari compilatori o livelli diversi di ottimizzazione.
Poiché C# non definisce l'ordine di valutazione degli effetti collaterali, entrambi i metodi di valutazione illustrati in precedenza sono corretti e uno può essere implementato.Per assicurarsi che il codice sia portabile e chiaro, evitare le istruzioni che dipendono da un particolare ordine di valutazione per gli effetti collaterali.