Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perangkap dan salah faham dalam kaedah lulus parameter fungsi C++

Perangkap dan salah faham dalam kaedah lulus parameter fungsi C++

王林
王林asal
2024-04-13 09:03:01503semak imbas

Terdapat dua cara untuk menghantar parameter fungsi dalam C++: lulus mengikut nilai dan lulus dengan rujukan. Melepasi nilai mencipta salinan parameter, dan pengubahsuaian pada salinan tidak menjejaskan pembolehubah asal. Alamat parameter diluluskan melalui rujukan, dan mengubah suai objek rujukan secara langsung mempengaruhi pembolehubah asal. Perangkap biasa termasuk: menghantar parameter rujukan secara salah yang mengakibatkan nilai lulus demi nilai, mengubah suai parameter nilai pas tanpa menjejaskan pembolehubah asal, rujukan tidak dimulakan dan rujukan berjuntai. Apabila mengendalikan rentetan, menghantar rentetan melalui rujukan boleh mengelakkan kehilangan pengubahsuaian yang disebabkan oleh lulus mengikut nilai.

C++ 函数参数传递方式的陷阱和误区

Perangkap dan Salah Faham dalam Lulus Parameter Fungsi C++

Apabila menghantar parameter fungsi dalam C++, terdapat dua cara utama: lulus mengikut nilai dan lulus melalui rujukan. Adalah penting untuk memahami nuansa kedua-dua pendekatan untuk mengelakkan perangkap dan perangkap biasa.

Pass by value

Pass by value mencipta salinan parameter dan menghantar salinan kepada fungsi. Sebarang pengubahsuaian pada salinan dalam fungsi tidak kelihatan.

void print_double(int x) {
  x *= 2;
  std::cout << x << std::endl;
}

int main() {
  int a = 5;
  print_double(a); // 输出:10
  std::cout << a << std::endl; // 输出:5
}

Lulus melalui rujukan

Lulus melalui rujukan menghantar alamat parameter kepada fungsi. Sebarang pengubahsuaian kepada objek yang dirujuk dalam fungsi secara langsung mempengaruhi objek asal.

void swap(int& a, int& b) {
  int temp = a;
  a = b;
  b = temp;
}

int main() {
  int x = 5, y = 10;
  swap(x, y);
  std::cout << x << " " << y << std::endl; // 输出:10 5
}

Perangkap dan Mitos

Perangkap 1: Melepasi parameter rujukan yang tidak betul

Melalui pembolehubah biasa dan bukannya pembolehubah rujukan akan menghasilkan nilai pas demi, walaupun parameter fungsi diisytiharkan sebagai rujukan.

Perangkap 2: Cuba mengubah suai parameter yang diluluskan mengikut nilai

Pengubahsuaian kepada parameter yang diluluskan mengikut nilai tidak akan ditunjukkan dalam pembolehubah asal.

Perangkap 3: Merujuk pembolehubah yang tidak dimulakan

Sebelum menghantar hujah rujukan, pastikan pembolehubah dimulakan.

Perangkap 4: Rujukan Berjuntai

Sebuah titik rujukan kepada ingatan tidak sah apabila objek yang dirujuk tidak lagi wujud. Elakkan merujuk kepada objek sementara atau di luar skop.

Kes Praktikal: Pemprosesan Rentetan

Pertimbangkan fungsi yang mendapat aksara pertama rentetan:

char get_first_char(std::string str) {
  return str[0];
}

Menggunakan nilai lulus, sebarang pengubahsuaian yang dibuat akan hilang apabila fungsi itu kembali. Untuk membetulkannya, kita harus menghantar rentetan melalui rujukan:

char get_first_char(std::string& str) {
  return str[0];
}

Ini memastikan bahawa sebarang pengubahsuaian pada rentetan ditunjukkan di luar fungsi.

Atas ialah kandungan terperinci Perangkap dan salah faham dalam kaedah lulus parameter 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