void A (int number) // passaggio per valore. Dentro la funzione, { // number è un'altra variabile number *= 2; } void B (int & number) // per riferimento. La variabile stessa sarà modificata { number *= 2; } int a = 5; A (a); // a non modificata B (a); // a modificataPossiamo confrontare il nuovo metodo con il passaggio di puntatori (usato in C). Ma è più potente. Il compilatore lo ottimizzerà meglio (forse). Il codice è molto più facile da scrivere, basta solo aggiungere un & per passare per riferimento invece che per valore.
Mentre se vuoi passare puntatori di puntatori, non puoi usare riferimenti di riferimenti, che non ha senso.
I riferimenti sono sempre usati nei costruttori di copia per ottenere un riferimento all'oggetto base (la sorgente della copia).