Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci tentang parameter fungsi C++: kekhususan parameter lulus dalam pengendalian pengecualian

Penjelasan terperinci tentang parameter fungsi C++: kekhususan parameter lulus dalam pengendalian pengecualian

WBOY
WBOYasal
2024-04-26 14:00:021130semak imbas

Dalam pengendalian pengecualian, kaedah lulus parameter fungsi C++ akan mempengaruhi tingkah laku abnormal: lulus nilai: pembolehubah setempat dan parameter lulus nilai akan dimusnahkan tanpa menjejaskan data asal. Melewati rujukan: Pengecualian akan menjejaskan data asal, yang membawa kepada tingkah laku yang tidak ditentukan. Pemindahan penunjuk: Data asal tidak akan terjejas, tetapi data yang ditunjuk oleh penunjuk mungkin diubah suai.

C++ 函数参数详解:异常处理中参数传递的特殊性

Penjelasan terperinci parameter fungsi C++: Keistimewaan lulus parameter dalam pengendalian pengecualian

Terdapat tiga cara untuk menghantar parameter fungsi dalam C++: hantaran nilai, hantaran rujukan dan hantaran penunjuk. Ketiga-tiga kaedah ini menunjukkan tingkah laku yang berbeza dalam pengendalian pengecualian.

Lulus nilai

Lulus nilai ialah kaedah hantaran parameter lalai. Parameter fungsi dianggap sebagai pembolehubah tempatan dalam fungsi. Apabila pengecualian berlaku dalam fungsi, ruang memori yang diperuntukkan kepada parameter pada fungsi panggilan akan dimusnahkan. Dalam kes ini, pengecualian tidak menjejaskan data asal fungsi panggilan.

Kes praktikal:

void func(int x) {
  // ...
  throw std::exception();
  // ...
}

int main() {
  int y = 10;
  try {
    func(y);
  } catch (std::exception& e) {
    std::cout << e.what() << std::endl;
  }
  std::cout << y << std::endl; // 输出:10
}

Lulus melalui rujukan

Lulus melalui rujukan menghantar rujukan parameter pada fungsi panggilan ke bahagian dalam fungsi. Apabila pengecualian berlaku dalam fungsi, pengecualian masih akan menjejaskan data asal dalam fungsi panggilan.

Kes praktikal:

void func(int& x) {
  // ...
  throw std::exception();
  // ...
}

int main() {
  int y = 10;
  try {
    func(y);
  } catch (std::exception& e) {
    std::cout << e.what() << std::endl;
  }
  std::cout << y << std::endl; // 输出:未定义行为
}

Hantaran penunjuk

Hantaran penunjuk melepasi penunjuk parameter pada fungsi panggilan ke bahagian dalam fungsi. Apabila pengecualian berlaku dalam fungsi, pengecualian tidak akan menjejaskan data asal dalam fungsi panggilan. Tetapi data yang ditunjukkan oleh penunjuk mungkin diubah suai.

Kes praktikal:

void func(int* x) {
  // ...
  *x = 20; // 修改指针所指向的数据
  throw std::exception();
  // ...
}

int main() {
  int y = 10;
  try {
    func(&y);
  } catch (std::exception& e) {
    std::cout << e.what() << std::endl;
  }
  std::cout << y << std::endl; // 输出:20
}

Nota

Dalam pengendalian pengecualian, apabila pengecualian berlaku, ruang memori yang diduduki terutamanya oleh pembolehubah tempatan fungsi dan parameter yang diluluskan oleh nilai akan dimusnahkan. Parameter yang diluluskan melalui rujukan atau penuding tidak akan dimusnahkan dan data asal yang sepadan masih wujud. Perlu diingatkan bahawa untuk pemindahan penunjuk, data yang ditunjuk oleh penunjuk boleh diubah suai.

Atas ialah kandungan terperinci Penjelasan terperinci tentang parameter fungsi C++: kekhususan parameter lulus dalam pengendalian pengecualian. 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