Passaggio per riferimento in C++

C++ introduce un nuovo modo per passare dei parametri a una funzione, il passaggio per riferimento.

Riassumiamo velocemente i due metodi di passaggio dei parametri che abbiamo visto in C:

  • Il passaggio per valore effettua una copia del contenuto delle variabili passate, rendendole immutabili dalla funzione.
    #include <stdio.h>

    void aggiungi_uno(int n) {
        n = n + 1;
    }

    int main() {
        int n = 1;

        aggiungi_uno(n);

        //n non cambia, perchè lo passiamo per valore
        printf("n = %d \n",n);

        return 0;
    }
  • Il passaggio per riferimento di c manda alla funzione un puntatore alla variabile, permettendo di cambiarne il valore.
    #include <stdio.h>

    void aggiungi_uno(int *n) {
        *n = *n + 1;
    }

    int main() {
        int n = 1;

        aggiungi_uno(&n);

        //n cambia, perchè lo passiamo per riferimento
        printf("n = %d \n",n);

        return 0;
    }

Passaggio per riferimento in C++

Come abbiamo visto esiste già un passaggio per riferimento in C, in C++ questo viene chiamato passaggio per puntatore, in favore di una nuova tecnica chiamata passaggio per riferimento che troviamo qui sotto.

#include <iostream>

using namespace std;

void aggiungi_uno(int &n) {
    n = n + 1;
}

int main() {
    int n = 1;

    aggiungi_uno(n);

    //n cambia, perchè lo passiamo per riferimento (c++)
    cout << "n = " << n << endl;

    return 0;
}

L’effetto è lo stesso del passaggio per puntatore, ma ci risulta più comodo, perchè non dobbiamo mettere la ”&” nella chiamata delle funzione, ma solo una volta nella dichiarazione.

Inoltre, il passaggio per riferimento è anche più sicuro: le variabili con valore NULL o di tipo void non sono ammesse. Questo rende effettivamente obsoleto il passaggio per puntatore di C nella buona parte del codice che scriveremo quotidianamente.