Una delle cose che imparerai con il tempo, e che chi e' "ziovine" non capisce, e' la seguente
- benche' il linguaggio di programmazione PERMETTA la scrittura di certe espressioni
- queste espressioni NON SI SCRIVONO/USANO perche' richiedono troppa attenzione per essere usate correttamente
Basta poco per incorrere in qualche errore legato al diverso comportamento di qualche compilatore, errore che' per essere trovato, puo' essere
un bagno di sangue e lacrime
Il caso del pre/post incremento/decremento e' ESATTAMENTE una di queste situazioni: a te serve sapere ESATTAMENTE quello che vuoi ottenere, per cui tra:
c = c+1;
++c;
c++;
userai quello che ti ASSICURA che il risultato e' ESATTAMENTE quello che ti serve.
Nella fattispecie, gli autoincrementi li usi nel 99.9% dei casi solo nei cicli for, ed EVENTUALMENTE, ma anche no, quando devi scandire un vettore.
Ad esempio, tra:
c = 0;
d = new int[10];
while (c < 10) d[c++] = 0;
e
for (c=0; c<10; ++c) d[c] = 0;
userai il secondo metodo perche' e' piu' chiaro.
Poi ci sono i fissati dell'efficienza che PENSANO che la prima versione sia piu' efficiente della seconda, senza rendersi conto che i problemi di efficienza non sono legati a queste linee di codice, ma nella comlpessita' computazionale dell'algoritmo:
- serve a poco migliorare le performace di qualche millisecondo (la complessita' computazionale di un ciclo, con le dovute considerazioni al contorno e', OVVIAMENTE, lineare) se l'algoritmo ha una complessita' computazionale esponenziale.
Inoltre, il compilatore e' gia' per conto suo, in grado di fare delle ottimizzazioni che uno nemmeno si sognerebbe di fare.
In particolare PROPRIO con i cicli, se scritti in modo
canonico.