C++ mekanisme pengendalian pengecualian dan contoh kod

王林
Lepaskan: 2023-08-21 22:07:44
asal
1523 orang telah melayarinya

Mekanisme pengendalian pengecualian C++ dan contoh kod

Dalam pengaturcaraan C++, mekanisme pengendalian pengecualian ialah konsep yang sangat penting, yang boleh membantu kami menangani ralat masa jalan dan situasi yang tidak dijangka, menjadikan program lebih mantap dan boleh dipercayai. Artikel ini akan memperkenalkan mekanisme pengendalian pengecualian dalam C++, termasuk definisi pengecualian, melontar pengecualian, menangkap pengecualian, pengendali pengecualian, dll., dan menyediakan beberapa contoh kod untuk membantu pembaca memahami dan menggunakan dengan lebih baik.

1. Definisi pengecualian

Semasa pelaksanaan biasa program, jika beberapa ralat yang tidak dapat dikendalikan atau situasi yang tidak dijangka ditemui, pengecualian akan berlaku. Pengecualian boleh difahami sebagai mekanisme perlindungan untuk program, yang boleh memberikan maklumat ralat dan keluar dari program dengan anggun apabila ralat berlaku dalam program untuk memastikan keselamatan dan kebolehpercayaan program.

C++ mentakrifkan beberapa kelas pengecualian standard, yang mewakili pelbagai jenis pengecualian, seperti: std::exception, std::bad_alloc, std::runtime_error, dsb. Kami juga boleh menyesuaikan kelas pengecualian untuk mewakili pengecualian tertentu.

2. Throw exception

Apabila pengecualian berlaku dalam program, anda boleh menggunakan kata kunci lontaran untuk membuang pengecualian dan menyerahkan objek pengecualian kepada pengendali pengecualian. Biasanya, sintaks untuk melontar pengecualian adalah seperti berikut:

throw exceptionType(argument);
Salin selepas log masuk

Antaranya, exceptionType ialah jenis kelas pengecualian, dan argumen ialah parameter objek pengecualian, yang boleh menjadi sebarang jenis data.

Berikut ialah contoh kod ringkas yang menunjukkan cara membuang kelas pengecualian standard std::runtime_error dan menghantar mesej ralat sebagai parameter:

#include <iostream>
#include <stdexcept>

void division(int a, int b){
  if (b == 0){
    throw std::runtime_error("Division by zero");
  }
  std::cout << "Result: " << a/b << std::endl;
}

int main(){
  try{
    division(10, 0);
  }
  catch(std::exception& e){
    std::cout << "Exception caught: " << e.what() << std::endl;
  }
  return 0;
}
Salin selepas log masuk

Dalam kod di atas, apabila pembahagi ialah 0, atur cara akan membuang std ::runtime_errorException dan hantar rentetan mesej ralat sebagai parameter. Dalam fungsi utama, kami menggunakan pernyataan cuba-tangkap untuk menangkap pengecualian ini dan mencetak mesej ralat pengecualian.

3. Tangkap pengecualian

Apabila program melemparkan pengecualian, kita perlu menangkap dan mengendalikan pengecualian untuk mengelakkan ranap program. Pengecualian boleh ditangkap menggunakan pernyataan cuba-tangkap, sintaksnya adalah seperti berikut:

try{
  // 可能抛出异常的代码
}
catch(exceptionType1& e1){
  // 处理类型为exceptionType1的异常
}
catch(exceptionType2& e2){
  // 处理类型为exceptionType2的异常
}
catch(...){
  // 处理所有类型的异常
}
Salin selepas log masuk

Dalam blok pernyataan cuba, kita boleh memasukkan kod yang mungkin membuang pengecualian. Apabila program melemparkan pengecualian, ia akan melompat keluar dari blok pernyataan cuba dan memasuki blok pernyataan tangkapan yang sepadan untuk diproses berdasarkan padanan jenis pengecualian dan pernyataan tangkapan. Pernyataan tangkapan terakhir, catch(...), boleh mengendalikan semua jenis pengecualian, tetapi penggunaannya tidak disyorkan kerana ia akan kehilangan maklumat tentang objek pengecualian dan menyusahkan untuk penyahpepijatan dan penyelenggaraan program.

Berikut ialah contoh kod ringkas yang menunjukkan cara menangkap pengecualian std::runtime_error dan mengendalikannya:

#include <iostream>
#include <stdexcept>

void division(int a, int b){
  if (b == 0){
    throw std::runtime_error("Division by zero");
  }
  std::cout << "Result: " << a/b << std::endl;
}

int main(){
  try{
    division(10, 0);
  }
  catch(std::runtime_error& e){
    std::cout << "Exception caught: " << e.what() << std::endl;
  }
  return 0;
}
Salin selepas log masuk

Dalam kod di atas, apabila pembahagi ialah 0, atur cara membuang pengecualian std::runtime_error. Dalam fungsi utama, kami menggunakan pernyataan cuba-tangkap untuk menangkap pengecualian ini dan mencetak mesej ralat pengecualian.

4. Pengendali pengecualian

Selain pernyataan cuba-tangkap, C++ juga menyediakan mekanisme khas untuk mengendalikan pengecualian yang tidak ditangkap, dipanggil pengendali pengecualian. Anda boleh menggunakan fungsi std::set_terminate() untuk mendaftarkan pengendali pengecualian dan melaksanakan kod pengendali apabila pengecualian yang tidak ditangkap berlaku dalam program. Pengendali pengecualian biasanya digunakan untuk menangani ralat yang serius, seperti memori tidak mencukupi, ralat membaca dan menulis fail, dsb.

Berikut ialah contoh kod ringkas yang menunjukkan cara mendaftar dan menggunakan pengendali pengecualian:

#include <iostream>
#include <cstdlib>

void myExceptionHandler(){
  std::cout << "Unhandled exception" << std::endl;
  std::exit(1);
}

int main(){
  std::set_terminate(myExceptionHandler);
  int* p = new int[1000000000];
  delete[] p;
  return 0;
}
Salin selepas log masuk

Dalam kod di atas, kami menggunakan fungsi std::set_terminate() untuk mendaftar pengendali pengecualian myExceptionHandler, dan dalam fungsi utama Peruntukkan blok memori yang besar. Oleh kerana ingatan tidak mencukupi, program akan membuang pengecualian std::bad_alloc Pengecualian ini akan ditangkap oleh pemproses myExceptionHandler, mencetak mesej ralat dan keluar dari program.

Ringkasan

Mekanisme pengendalian pengecualian C++ ialah bahagian yang sangat penting dalam program ini boleh membantu kami menangani ralat masa jalan dan situasi yang tidak dijangka, menjadikan program lebih mantap dan boleh dipercayai. Artikel ini memperkenalkan definisi pengecualian, melontar pengecualian, menangkap pengecualian, pengendali pengecualian, dsb. dalam C++, dan menyediakan beberapa contoh kod untuk membantu pembaca memahami dan menerapkannya dengan lebih baik. Dalam pengaturcaraan sebenar, kita harus menggunakan mekanisme pengendalian pengecualian secara munasabah dan mengelakkan penyalahgunaan dan penyalahgunaan untuk memastikan kecekapan dan kebolehselenggaraan program.

Atas ialah kandungan terperinci C++ mekanisme pengendalian pengecualian dan contoh kod. 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