Hubungan antara kaedah lulus parameter fungsi C++ dan pengendalian pengecualian

WBOY
Lepaskan: 2024-04-13 08:54:02
asal
1121 orang telah melayarinya

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.

C++ 函数参数传递方式与异常处理的关联

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
}
Salin selepas log masuk
  • Korelasi pengendalian pengecualian: Jika fungsi melepasi parameter mengikut nilai dan parameter itu membuang pengecualian, pengecualian tidak akan disebarkan ke fungsi panggilan.

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
}
Salin selepas log masuk
  • Korelasi pengendalian pengecualian: Jika fungsi melepasi parameter melalui rujukan, dan parameter itu membuang pengecualian, pengecualian akan disebarkan ke fungsi panggilan.

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
}
Salin selepas log masuk
  • Perkaitan pengendalian pengecualian: Jika fungsi melepasi parameter sebagai penuding, dan pembolehubah yang ditunjuk melemparkan pengecualian, pengecualian akan disebarkan ke fungsi panggilan.

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;
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan