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.

© Nicola Bovolato 2020