Maison > développement back-end > C++ > Comment allouer de la mémoire pour les paramètres de référence de fonction C++

Comment allouer de la mémoire pour les paramètres de référence de fonction C++

WBOY
Libérer: 2024-04-20 09:24:01
original
910 Les gens l'ont consulté

En C++, les paramètres de fonction peuvent être passés par valeur, en passant une copie du paramètre, ou passés par référence, en accédant directement à la mémoire d'origine du paramètre. Lors du passage par référence, les modifications apportées par la fonction aux paramètres sont reflétées directement dans l'appelant. Par exemple, transmettre des paramètres par référence peut optimiser les performances, en particulier lorsqu'il s'agit de structures de données volumineuses, et éviter une allocation de mémoire supplémentaire et une surcharge de copie.

C++ 函数引用参数的内存分配方式

Comment la mémoire est allouée pour les paramètres de référence de fonction en C++

En C++, les paramètres de fonction peuvent être transmis par valeur ou par référence. Lors du passage par valeur, une copie du paramètre est transmise à la fonction, tandis que lors du passage par référence, la fonction utilise directement l'adresse mémoire d'origine du paramètre.

Passé par valeur

void incrementValue(int value) {
  value++;  // 改变的是 value 的副本,不会影响原始变量
}

int main() {
  int number = 5;
  incrementValue(number);
  cout << number << endl;  // 仍然输出 5
}
Copier après la connexion

Passé par référence

void incrementValue(int& value) {
  value++;  // 改变的是原始变量
}

int main() {
  int number = 5;
  incrementValue(number);
  cout << number << endl;  // 输出 6
}
Copier après la connexion

Dans l'exemple ci-dessus, le paramètre incrementValue 函数通过引用传递了 value. Cela signifie que la fonction opère directement sur la variable d'origine, donc toute modification apportée à celle-ci sera reflétée dans l'appelant de la fonction.

Cas pratique :

Imaginez un scénario dans lequel vous devez écrire une fonction pour calculer le produit scalaire de deux vecteurs. Le passage par valeur nécessitera la création de deux copies du vecteur, ce qui entraînera une allocation de mémoire supplémentaire et des performances plus lentes. Au lieu de cela, passer un vecteur par référence évite l’allocation de mémoire, améliorant ainsi les performances.

double dotProduct(const vector<double>& a, const vector<double>& b) {
  double sum = 0.0;
  for (size_t i = 0; i < a.size(); i++) {
    sum += a[i] * b[i];
  }
  return sum;
}

int main() {
  vector<double> a = {1.0, 2.0, 3.0};
  vector<double> b = {4.0, 5.0, 6.0};
  cout << dotProduct(a, b) << endl;  // 输出 32.0
}
Copier après la connexion

Dans ce cas, passer le vecteur par référence évite de créer une copie, améliorant ainsi les performances de calcul du produit scalaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal