Kaedah lulus parameter fungsi C++ mempengaruhi pengendalian pengecualian: lulus nilai: pengecualian tidak disebarkan ke fungsi panggilan. Lulus dengan rujukan: Pengecualian disebarkan ke fungsi panggilan. Hantaran penunjuk: Pengecualian disebarkan ke fungsi panggilan, dan pemboleh ubah penunjuk melemparkan pengecualian.
Hubungan antara kaedah lulus parameter fungsi C++ dan pengendalian pengecualian
Dalam C++, parameter fungsi boleh dihantar dalam tiga cara: hantaran nilai, hantaran rujukan atau hantaran penunjuk. Kaedah penghantaran khusus yang dipilih bukan sahaja akan menjejaskan prestasi fungsi, tetapi juga mempunyai kesan ke atas pengendalian pengecualian.
1. Pemindahan nilai
Pemindahan nilai ialah cara pemindahan yang paling mudah. Apabila parameter diluluskan oleh nilai, fungsi mendapat salinan nilai parameter. Jika fungsi mengubah suai nilai salinan ini, nilai parameter dalam fungsi asal tidak akan terjejas.
void print_value(int x) { x++; // x是参数值的副本 } int main() { int a = 10; print_value(a); std::cout << a << std::endl; // 输出仍然是10 }
2. Lulus melalui rujukan
Melalui rujukan adalah serupa dengan lulus mengikut nilai, tetapi fungsi itu tidak memperoleh salinan nilai parameter, tetapi rujukan kepada nilai parameter. Ini bermakna bahawa sebarang pengubahsuaian parameter oleh fungsi akan secara langsung mempengaruhi nilai parameter dalam fungsi asal.
void print_value(int& x) { x++; // x是参数值的引用 } int main() { int a = 10; print_value(a); std::cout << a << std::endl; // 输出是11 }
3. Hantaran penunjuk
Hantaran penunjuk ialah cara yang lebih fleksibel untuk menghantar parameter. Apabila parameter diluluskan sebagai penunjuk, fungsi mendapat alamat pembolehubah yang ditunjuk oleh parameter. Fungsi secara tidak langsung boleh mengakses dan mengubah suai nilai pembolehubah melalui penunjuk.
void print_value(int* x) { (*x)++; // 通过指针间接访问并修改变量的值 } int main() { int a = 10; print_value(&a); std::cout << a << std::endl; // 输出是11 }
Kes praktikal:
Berikut ialah contoh menggunakan hantaran penunjuk fungsi dan pengendalian pengecualian:
#include <iostream> #include <exception> void do_something(int* x) { if (*x < 0) { throw std::runtime_error("Invalid value"); } *x *= 2; } int main() { try { int a = 5; void (*fp)(int*) = &do_something; // 获取函数指针 fp(&a); // 通过函数指针调用函数 std::cout << a << std::endl; // 输出是10 } catch (const std::exception& e) { std::cerr << e.what() << std::endl; // 输出异常消息 } return 0; }
Dalam contoh ini, do_something
函数以指针传递参数。如果参数值小于 0,函数会抛出异常。调用函数通过函数指针调用do_something
berfungsi dan gunakan pengendalian pengecualian untuk menangkap kemungkinan pengecualian.
Atas ialah kandungan terperinci Hubungan antara kaedah lulus parameter fungsi C++ dan pengendalian pengecualian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!