Dalam C++, parameter fungsi boleh dihantar mengikut nilai (membuat salinan untuk dihantar ke fungsi) atau dengan rujukan (melepasi alamat pembolehubah asal). Melepasi nilai adalah selamat tetapi mahal dan sesuai untuk parameter kecil atau apabila pembolehubah asal perlu dilindungi. Hantaran rujukan adalah pantas tetapi mempunyai fleksibiliti yang rendah dan sesuai untuk objek besar atau situasi di mana pembolehubah asal perlu diubah suai. Eksperimen menunjukkan bahawa apabila berurusan dengan tatasusunan yang besar, lulus melalui rujukan dengan ketara meningkatkan prestasi daripada lulus dengan nilai.
Impak kaedah lulus parameter fungsi C++ pada prestasi program
Dalam C++, parameter fungsi boleh diluluskan mengikut nilai atau rujukan. Untuk jenis parameter yang berbeza, adalah penting untuk memilih kaedah penyampaian yang sesuai kerana ia akan menjejaskan prestasi program dengan ketara.
Pass by value
In pass by value, salinan parameter fungsi dihantar ke fungsi. Menukar salinan tidak menjejaskan nilai pembolehubah asal. Walaupun lulus mengikut nilai memberikan keselamatan yang lebih besar, terdapat overhed apabila menghantar objek besar kerana parameter perlu dibuat dan disalin. Contoh kod berikut menunjukkan lulus mengikut nilai:
void foo(int num) { num++; // 值传递副本,不会影响原始变量 } int main() { int x = 5; foo(x); cout << x << endl; // 输出5,没有改变 }
Lulus melalui rujukan
Secara lulus dengan rujukan, rujukan kepada parameter fungsi dihantar kepada fungsi. Ini bermakna bahawa fungsi menerima alamat pembolehubah asal. Perubahan yang dibuat pada rujukan akan secara langsung mempengaruhi nilai pembolehubah asal. Rujukan pass-by menghapuskan overhed passing by value kerana ia tidak memerlukan parameter penyalinan, tetapi ia mengorbankan fleksibiliti kerana pengubahsuaian pembolehubah yang ditunjukkan oleh rujukan tidak dibenarkan. Contoh kod berikut menunjukkan lulus melalui rujukan:
void foo(int& num) { num++; // 引用传递引用,更改原始变量 } int main() { int x = 5; foo(x); cout << x << endl; // 输出6,已改变 }
Kaedah hantaran terpilih
Memilih kaedah hantaran terbaik bergantung pada situasi:
Kes Praktikal
Dalam contoh berikut, kami membandingkan prestasi atur cara dalam kes menghantar tatasusunan sebagai nilai dan rujukan kepada fungsi:
#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; }
Semasa melaksanakan program ini, kami melihat bahawa menggunakan rujukan lulus dengan Prestasi meningkat dengan ketara kerana tatasusunan besar tidak perlu disalin.
Atas ialah kandungan terperinci Kesan kaedah lulus parameter fungsi C++ pada prestasi program. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!