Chiama per riferimento vs Chiama per valore in C++

Jinku Hu 12 ottobre 2023
  1. Usa il simbolo & per chiamare la funzione tramite riferimento in C++
  2. Utilizzare la definizione di funzione semplice per chiamare le funzioni in base al valore in C++
Chiama per riferimento vs Chiama per valore in C++

Questo articolo spiegherà diversi metodi su come chiamare per riferimento e come chiamare per valore in C++.

Usa il simbolo & per chiamare la funzione tramite riferimento in C++

Gli argomenti della funzione sono la parte centrale della definizione della funzione, poiché sono i valori che inizializzano i parametri della funzione. Quando il parametro è un riferimento, è associato all’argomento e il valore dell’argomento non viene copiato. Il comportamento corrispondente è chiamato passando per riferimento o che la funzione è chiamata per riferimento. Si noti che questo metodo è più comunemente usato quando è necessario passare oggetti relativamente più grandi tra le funzioni poiché consente di risparmiare risorse extra trattenute dal processo di copia.

Le operazioni che vengono condotte sull’oggetto all’interno della funzione modificheranno la posizione di memoria originale della variabile, che è un metodo simile al passaggio del puntatore all’oggetto. Nell’esempio seguente, dimostriamo la funzione func che accetta un singolo parametro di tipo int e assegna il valore 123. Il simbolo i è semplicemente il nome alias per l’oggetto j originale dal programma main. Ricorda però che il simbolo & è piuttosto sovraccarico in C++ e non deve essere confuso con la funzionalità dell’operatore di indirizzo.

#include <iostream>

using std::cout;
using std::endl;

void func(int &i) { i = 123; }

int main() {
  int j = 0;
  func(j);
  cout << "j = " << j << endl;

  exit(EXIT_SUCCESS);
}

Produzione:

j = 123

Utilizzare la definizione di funzione semplice per chiamare le funzioni in base al valore in C++

La chiamata alla funzione in base al valore viene spesso detta per il comportamento quando la funzione data copia il parametro e lo memorizza come oggetto separato nel rispettivo ambito. La notazione corrispondente non richiede simboli distinti, ma gli argomenti sono specificati come semplici variabili. Di conseguenza, l’ambito del blocco funzione ha un oggetto separato e le modifiche ad esso non influenzano la variabile originale dalla funzione main. La pratica più comune sarebbe quella di impiegare il metodo chiamata per valore quando gli argomenti passati sono tipi incorporati o piccoli oggetti facilmente copiabili tra le funzioni.

#include <iostream>

using std::cout;
using std::endl;

void func2(int i) { i = 123; }

void func(int &i) { i = 123; }

void func(int *ip) {
  *ip = 123;
  ip = nullptr;
}

int main() {
  int j = 0;
  func(j);
  cout << "j = " << j << endl;

  j = 0;
  func2(j);
  cout << "j = " << j << endl;

  j = 0;
  func(&j);
  cout << "j = " << j << endl;

  exit(EXIT_SUCCESS);
}

Produzione:

j = 123
j = 0
j = 123
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - C++ Function