Esempio banale. Invece che:
Fai:codice:Oggetto funzione() { ... } ... Oggetto o = funzione();
O in modo piu` esplicito tramite un puntatore, altrimenti non ti rendi conto, guardando la chiamata, di quando un parametro venga passato per riferimento, essendo la sintassi identica al passaggio per valore:codice:void funzione( Oggetto& ) { ... } ... Oggetto o; funzione( o );
E per parametri non destinati ad essere modificati fai sempre:codice:void funzione( Oggetto* ) { ... } ... Oggetto o; funzione( &o ); // il '&' evidenzia una potenziale modifica del parametro attuale
I tipi primitivi invece passali sempre per valore. Questo ovviamente quando non si richiede side-effect.codice:void funzione( const Oggetto& ) { ... }

Rispondi quotando