Ciao a tutti, vengo subito al sodo:
Nono sono un programmatore ma non so per quale masochistico motivo ho studiato bene il C. Per non so quale altra masochistica ragione ora mi sto avvicinando al C++, però non mi è chiara l'effettiva utilità di alcune delle "innovazioni" di questo linguaggio. Fra tutte quella che mi ha lasciato più perplesso è questa chiamata per riferimento. In C io scrivevo:
codice:
void swap(int * x, int * y) {
int temp;
temp=*y;
*y=*x;
*x=temp;
}
int main(int argc, char **argv) {
int x;
int y;
swap(&x, &y);
}
Questo tipo di notazione è abbastanza chiaro: quando richiamo la funzione swap(int*, int*) nel main inserisco gli indirizzi dei due interi che voglio che vengano scambiati. Anche senza conoscere la funzione swap(int*,int*), il fatto di aver passato alla funzione degli indirizzi di memoria mi suggerisce che le variabili x, e y potranno essere manipolate dalla funzione, se invece la la chiamata fosse stata swap(x,y) sarei stato sicuro che le variabili x e y sarebbero rimaste invariate. In C++ invece è tutto diverso, poiché il codice di prima si può scrivere anche:
codice:
void swap(int &x, int &y) {
int temp;
temp=y;
y=x;
x=temp;
}
int main(int argc, char **argv) {
int x;
int y;
swap(x, y);
}
Probabilmente sono io che non ho la mente abbastanza aperta, ma questo tipo di notazione mi pare parecchio ambigua. Non solo nella chiamata swap(x,y), non ho idea che in realtà sto passando degli indirizzi di memoria, ma nella funzione swap(int &, int &) le variabili x, e y vengono trattate come se fossero interi e non puntatori, rendendo il tutto meno immediato da comprendere, almeno per me. Eppure credo che lo scopo di tutto questo sia semplificare la lettura dei programmi.
Ho letto parecchi programmi in C++ e raramente ho visto programmatori adottare questo tipo di notazione.
Sono io che sono ignorante o effettivamente la 'vecchia maniera' era meglio? Se mi sbaglio potete farmi degli esempi in cui questo nuovo modo di scrivere aumenta la chiarezza di un programma? Scusate per la lunghezza del post