Si. Un vantaggio che si evidenzia specialmente quando i parametri sono classi, la cui copia è onerosa.grazie alla quale posso andare ad agire sull'elemento "referenziato" senza crearne copie. Questo è il vantaggio?
Appunto per non avere problemi a runtime. Un reference è sempre legato a doppio filo a una variabile, pertanto non può andarsene per i fatti suoi. Insomma un reference è per sempre.Altrimenti non capisco perchè non passare proprio un indirizzo che però magari può dare problemi a runtime se per caso puntasse chissà cosa,
Puoi pensarlo come a un puntatore mascherato con regole molto più ferree.
Lo svantaggio di questo è che non si possono avere array di reference e se una classe contiene una variabile reference essa può essere inizializzata solo nella constructor list e non nel corpo del costruttore.codice:int i = 10; int *p = &i; int k = 20; p = &k; // valido. ///////////////////////////// int i = 10; int& p = i; int k = 20; p = k; // ERRORE!
Il vantaggio è che accedi alla variabile referenziata con una sintassi naturale e con la certezza che sarà sempre legata a qualcosa di valido (non come un puntatore di cui occorre controllare che sia non NULL per poi dereferenziarlo).

Rispondi quotando