La differenza tra argomenti e parametri delle funzioni in C++

Jinku Hu 12 ottobre 2023
La differenza tra argomenti e parametri delle funzioni in C++

Questo articolo spiegherà le differenze tra argomenti e parametri delle funzioni in C++.

L’anatomia delle funzioni in C++

Le funzioni sono l’elemento costitutivo comune di qualsiasi programma relativamente sofisticato. Consentono di definire le routine ricorrenti nel programma come blocchi separati e di richiamarle quando è necessario eseguire il codice corrispondente. La suddivisione di un programma in più funzioni rende il programma più modulare e di facile manutenzione e comprensione. Di conseguenza, questi programmi sono generalmente più facili da testare ed eseguire il debug.

Le funzioni di solito hanno nomi che le identificano in modo univoco; tuttavia, alcuni concetti come l’overload delle funzioni consentono al programmatore di definire più funzioni con lo stesso nome; esploreremo questa caratteristica nei paragrafi successivi. Anche le espressioni lambda sono incluse nel mix, che fornisce un modo per definire oggetti funzione senza nome. La somma di diverse istruzioni nel blocco funzione è chiamata corpo della funzione. Le funzioni hanno anche un tipo restituito che rappresenta il tipo del valore restituito al chiamante.

Un’altra parte critica della funzione è un elenco di parametri che denotano le variabili dichiarate come parte della firma della funzione. Il chiamante di solito passa alcuni valori concreti per inizializzare queste variabili nell’ambito della funzione. Questi ultimi valori sono chiamati argomenti e si dice che siano inizializzatori per i parametri della funzione. Tuttavia, i termini - parametri e argomenti possono essere usati in modo intercambiabile in alcuni contesti.

Nel programma di esempio qui sotto, vi mostriamo una funzione denominata - printVector, che ha un solo parametro (denominato vec) definito nella sua firma. Quando il processo viene invocato nella funzione main, gli viene passato l’argomento vec1. Una volta che l’esecuzione passa al corpo della funzione printVector, il parametro vec viene inizializzato con il valore corrispondente.

#include <iostream>
#include <vector>

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

template <typename T>
void printVector(const vector<T> &vec) {
  for (auto &i : vec) {
    cout << i << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> vec1{11, 82, 39, 72, 51, 32, 91};

  printVector(vec1);

  return EXIT_SUCCESS;
}

Produzione:

11; 82; 39; 72; 51; 32; 91;

Come accennato nel capitolo precedente, il C++ supporta il concetto di sovraccarico di funzioni, che consente al programmatore di definire più funzioni con lo stesso nome. Tuttavia, queste funzioni devono differire per il numero di argomenti che accettano o per i tipi di argomenti.

Il programma seguente mostra l’utilizzo di base per le funzioni sovraccaricate che moltiplicano due numeri del tipo int o double, rispettivamente.

#include <iostream>

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

int multiply(int x, int y) { return x * y; }

double multiply(double x, double y) { return x * y; }

int main() {
  int i1 = 10;
  double d1 = 0.1;

  cout << multiply(i1, i1 + 1) << endl;
  cout << multiply(d1, d1 + 1) << endl;

  return EXIT_SUCCESS;
}

Produzione:

110
0.11
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