Comment transmettre des arguments aux fonctions en C ++ par valeur vs. Par référence?

Comment transmettre des arguments aux fonctions en C ++ par valeur vs. Par référence?
Tout langage de programmation, y compris C ++, doit avoir la capacité de fournir des paramètres aux fonctions. Par valeur et par référence sont les deux principales méthodes qui peuvent être utilisées pour transmettre des paramètres. Les deux approches ont des avantages et des inconvénients, il est donc crucial pour les programmeurs de savoir quand utiliser chacun.

1: passer des arguments par valeur

Une copie de la variable est faite et fournie à la fonction lorsque Les arguments sont passés par valeur. Toutes les modifications apportées à la variable à l'intérieur de la fonction affectent uniquement la copie; Rien n'est changé pour la variable d'origine. Par conséquent, Passer par valeur est une méthode sécurisée car il n'y a aucune possibilité de modifier involontairement la valeur de la variable d'origine.

Passer par valeur, Cependant, peut être inefficace, surtout lorsqu'il s'agit de types de données importants ou complexes. Chaque appel de fonction nécessitant une copie des données peut rapidement épuiser le processeur et les ressources de mémoire. En outre, Passer par valeur ne peut pas être utilisé pour les fonctions qui visent à modifier la valeur de la variable d'origine car la copie et la variable d'origine ne sont pas liées.

2: passer des arguments par référence

Les variables peuvent être passé par référence en C ++ également, ce qui aide à résoudre ces problèmes. La variable d'origine est envoyée à la fonction lorsque passer par référence, et toutes les modifications effectuées à la variable à l'intérieur de la fonction affecteront également la variable d'origine. À cause de ce, passer par référence est sensiblement plus efficace pour les types de données importants ou complexes et évite la nécessité de copier.

Pour éviter les modifications involontaires, une fonction doit être explicitement désignée comme const. L'ajout du mot clé const à la déclaration de fonction, comme dans «int calcul (const int & a, const int & b)», accomplira cela.

Cependant, passer des arguments par référence nécessite également une attention particulière aux détails. Les programmeurs inexpérimentés peuvent faire des erreurs, telles que la création d'effets secondaires involontaires, le partage involontaire de données et les données externes.

Considérez le code suivant qui démontre les deux Méthodes de passage d'arguments:

#inclure
Utilisation de Namespace Std;
void PassByValue (int x)
x = 5;
couter << "Inside PassByValue: " << x << endl;

void PassByReference (int & x)
x = 5;
couter << "Inside PassByReference: " << x << endl;

int main()
int num1 = 2, num2 = 2;
couter << "Before function calls: num1= " << num1 << " num2= " << num2 << endl;
PASSBYVALUE (NUM1);
PassByReference (num2);
couter << "After function calls: num1= " << num1 << " num2= " << num2 << endl;
retour 0;

Dans le code ci-dessus, la première fonction, Passbyvalue, reçoit un argument entier par valeur. Dans la fonction, une nouvelle variable entière est créée et attribuée la valeur 5. L'entier d'origine reste non modifié. La deuxième fonction, Passbyreference, reçoit un argument entier par référence. Dans ce cas, la fonction manipule directement la variable d'origine.

Sortir

Comme prévu, le premier appel sort 5, mais n'a aucun effet sur la variable d'origine. En revanche, le deuxième appel modifie la valeur de Num2 à 5, ce qui affecte la sortie de l'instruction finale.

Passer par valeur vs. Passer par référence

1: façon d'appeler une fonction

Une différence entre Passer par valeur et passer par référence est comment la fonction est appelée. Quand Passer par valeur, L'appel de fonction doit inclure la valeur de la variable, telle que «calculer (a, b)». Quand passer par référence, L'appel de fonction doit inclure l'adresse mémoire de la variable, symbolisée par un caractère ampère et tel que «Calculer (& a, & b)».

2: Types de données

En général, Passer par valeur est le plus approprié lorsque vous travaillez avec des types de données petits ou simples, ou lorsque la fonction n'est pas destinée à modifier la variable d'origine. Passer par référence est plus approprié pour les types de données grands ou complexes, ou lorsque la fonction est destinée à modifier la valeur de la variable d'origine.

Conclusion

Lorsque les paramètres sont passé par valeur À une fonction, une copie de la variable est créée et fournie. Par passer par référence, La variable d'origine est envoyée à la fonction. En c++, passant des arguments par valeur ou par référence est un concept fondamental. Le choix de la bonne approche dépend des circonstances spécifiques et doit être soigneusement évalué. Les avantages de l'utilisation du référence L'approche peut entraîner un code plus efficace, malgré la tentation d'utiliser le plus facile Passer par valeur méthode.