En C++, les paramètres de fonction peuvent être passés par valeur (créant une copie à transmettre à la fonction) ou par référence (en passant l'adresse de la variable d'origine). Le passage par valeur est sûr mais coûteux et convient aux petits paramètres ou lorsque la variable d'origine doit être protégée. Le passage de référence est rapide mais a une faible flexibilité et convient aux objets volumineux ou aux situations où la variable d'origine doit être modifiée. Les expériences montrent que lorsqu'il s'agit de grands tableaux, le passage par référence améliore considérablement les performances que le passage par valeur.
L'impact de la méthode de transmission des paramètres de fonction C++ sur les performances du programme
En C++, les paramètres de fonction peuvent être transmis par valeur ou par référence. Pour différents types de paramètres, il est crucial de choisir la méthode de livraison appropriée car elle affectera considérablement les performances du programme.
Pass by value
En pass by value, une copie des paramètres de la fonction est transmise à la fonction. La modification de la copie n'affecte pas la valeur de la variable d'origine. Bien que le passage par valeur offre une plus grande sécurité, il y a une surcharge lors du passage d'objets volumineux car les paramètres doivent être créés et copiés. L'exemple de code suivant illustre le passage par valeur :
void foo(int num) { num++; // 值传递副本,不会影响原始变量 } int main() { int x = 5; foo(x); cout << x << endl; // 输出5,没有改变 }
Pass par référence
Dans le passage par référence, une référence à un paramètre de fonction est transmise à la fonction. Cela signifie que la fonction reçoit l'adresse de la variable d'origine. Les modifications apportées à la référence affecteront directement la valeur de la variable d'origine. Le passage par référence élimine la surcharge liée au passage par valeur car il ne nécessite pas de copie de paramètres, mais il sacrifie la flexibilité car la modification de la variable pointée par la référence n'est pas autorisée. L'exemple de code suivant illustre le passage par référence :
void foo(int& num) { num++; // 引用传递引用,更改原始变量 } int main() { int x = 5; foo(x); cout << x << endl; // 输出6,已改变 }
Méthode de passage sélective
Le choix de la meilleure méthode de passage dépend de la situation :
Cas pratique
Dans l'exemple suivant, nous comparons les performances du programme en cas de passage d'un tableau comme valeur et référence à la fonction :
#include <chrono> #include <vector> int sum_array_by_value(const std::vector<int>& arr) { int sum = 0; for (int i : arr) { sum += i; } return sum; } int sum_array_by_reference(std::vector<int>& arr) { int sum = 0; for (int& i : arr) { sum += i; } return sum; } int main() { std::vector<int> arr(1000000); for (int i = 0; i < arr.size(); i++) arr[i] = i; auto start = std::chrono::high_resolution_clock::now(); int sum1 = sum_array_by_value(arr); auto end = std::chrono::high_resolution_clock::now(); int elapsed1 = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count(); start = std::chrono::high_resolution_clock::now(); int sum2 = sum_array_by_reference(arr); end = std::chrono::high_resolution_clock::now(); int elapsed2 = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count(); std::cout << "Sum by value: " << elapsed1 << " ms" << std::endl; std::cout << "Sum by reference: " << elapsed2 << " ms" << std::endl; return 0; }
Lors de l'exécution de ce programme, nous observons qu'en utilisant le passage par référence, les performances sont significativement améliorées puisque les grands tableaux n'ont pas besoin d'être copiés.
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!