Newsgroup: it.comp.lang.c++
Titolo: Perchè usare l'operatore +=

Volevo chiedere se esiste un motivo pratico reale per utilizzare gli
operatori di somma, addizione, moltiplicazione e divisione contratti su tipi
predefiniti oppure se è semplicemente una preferenza di notazione. Si ha un
miglioramento nelle prestazioni? Nelle istruzioni contratte il l'espressione
left-hand viene valutata una volta soltanto invece che due? Oppure è solo
questione di "gusto" e "leggibilità"?
Se è solo questione di "leggibilità" sono dell'idea che usare gli operatori
contratti non sia una scelta così felice.
Grazie e ciao.

 ha scritto nel messaggio
news:KbAoa.39084$LB6.8...@news1.tin.it...

se hai una variabile che si chiama:
col_cippolo_che_mi_viene_voglia_di_riscriverla
e ci devi sommare qualche cosa d'altro riassegnando sempre il risultato ad
essa ... strada piu' breve e leggibile e' scrivere:
col_cippolo_che_mi_viene_voglia_di_riscriverla += i ;
non ti pare ???

 operatori contratti non sia una scelta così felice.
Mah... questione di gusti.
In realtà nel caso di operazioni logiche bit a bit è più leggibile,
secondo me. Ad esempio:
var |= 0x1F; // alza i 5 bit meno significativi
lo ritengo almeno altrettanto leggibile di:
var = var | 0x1F;
ma più compatto e veloce da scrivere.
Poi da qui agli operatori matematici il passo è breve...
--
Gerolamo

 wrote in message b7ul5s$ph7$1...@news.ngi.it...

Nei tuoi programmi usi variabili così lunghe? Nei miei non ci sono mai
variabili più lunghe di una decina di caratteri, si arriva ad espressioni
lunghette nel caso di dati membro o struct nidificati più di una volta ma
non sono casi così frequenti. La notazione contratta la vedo usare sovente
per variabili temporanee, contatori e altri casi in cui le variabili non
sono poi così lunghe da causare male alle dita nel riscriverle.
Inoltre non mi convince il motivo per cui:
questa_e_la_mia_variabile = questa_e_la_mia_variabile + alfa;
debba essere meno leggibile di:
questa_e_la_mia_variabile += alfa;
Secondo me è il contrario.

Secondo me č il contrario.
Alcuni motivi per quel costrutto, secondo me:
Quanto dura "funz_che_dura_un_ora()->dato_1 =
funz_che_dura_un_ora()->dato_1 + i;"?
Oppure:
"a[funzione_random()] += i;" si legge meglio di:
{
int n = funzione_random();
a[n] = a[n] + i;
}
-- 
S.L.

 Poi da qui agli operatori matematici il passo è breve...
Questione di gusti. Hai ragione, ognuno preferisce a modo suo.
Grazie per la risposta, hai chiarito il punto. Ciao.

 }
Per la leggibilità preferirei di gran lunga la seconda. Nella prima però c'è
una istruzione (tempo) e una variabile (spazio) in meno e questo è più
importante (EEE -> Efficacia, Efficienza, Eleganza). Insieme alla
spiegazione di Gerolamo sulle funzioni operator anche questi sono motivi
validi e chiariscono lo scopo dell'operatore, che non è solo una scelta di
stile.
Grazie mille. Ciao.

 }
^ questa ti fa pur risparmiare memoria nello spazio dati ...

^ questa ti fa pur risparmiare memoria nello spazio dati ...
   Non so, e` una vita che non guardo dentro il codice prodotto dal
compilatore. Immagino che una variabile temporanea cosi` vada dritta
dritta in un registro. Tuttavia dubito che un compilatore riesca ad
ottimizzare il caso in cui invochi per due volte una funzione molto
complessa, in quel caso io preferisco dargli una mano con la notazione
+=, piuttosto che con il ricorso a variabili temporanee, ma sono
gusti.
-- 
S.L.