Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk memperuntukkan memori untuk parameter rujukan fungsi C++

Bagaimana untuk memperuntukkan memori untuk parameter rujukan fungsi C++

WBOY
WBOYasal
2024-04-20 09:24:01906semak imbas

Dalam C++, parameter fungsi boleh dihantar mengikut nilai, menghantar salinan parameter, atau lulus melalui rujukan, mengakses terus memori asal parameter. Apabila melalui rujukan, perubahan yang dibuat kepada parameter oleh fungsi dicerminkan terus dalam pemanggil. Sebagai contoh, lulus parameter melalui rujukan boleh mengoptimumkan prestasi, terutamanya apabila berurusan dengan struktur data yang besar, dan mengelakkan peruntukan memori tambahan dan overhed salinan.

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

Cara memori diperuntukkan untuk parameter rujukan fungsi dalam C++

Dalam C++, parameter fungsi boleh diluluskan mengikut nilai atau rujukan. Apabila lulus mengikut nilai, salinan parameter dihantar ke fungsi, manakala apabila lulus melalui rujukan, fungsi menggunakan alamat memori asal parameter secara langsung.

Lulus nilai

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

int main() {
  int number = 5;
  incrementValue(number);
  cout << number << endl;  // 仍然输出 5
}

Lulus rujukan

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

int main() {
  int number = 5;
  incrementValue(number);
  cout << number << endl;  // 输出 6
}

Dalam contoh di atas, parameter incrementValue 函数通过引用传递了 value. Ini bermakna fungsi beroperasi secara langsung pada pembolehubah asal, jadi sebarang perubahan yang dibuat padanya akan ditunjukkan dalam pemanggil fungsi.

Kes praktikal:

Bayangkan senario di mana anda perlu menulis fungsi untuk mengira hasil darab titik dua vektor. Melepasi nilai akan memerlukan mencipta dua salinan vektor, menghasilkan peruntukan memori tambahan dan prestasi yang lebih perlahan. Sebaliknya, menghantar vektor melalui rujukan mengelakkan peruntukan memori, sekali gus meningkatkan prestasi.

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
}

Dalam kes ini, menghantar vektor melalui rujukan mengelakkan membuat salinan, sekali gus meningkatkan prestasi pengiraan produk titik.

Atas ialah kandungan terperinci Bagaimana untuk memperuntukkan memori untuk parameter rujukan fungsi C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn