一篇文章带你入门C++的异常处理
异常处理介绍
C++中有很多异常,比如说:除0异常、数组越界异常等。程序在执行中如果遇到异常,如果没有处理,将会导致程序崩溃。为了应对这种情况,我们可以使用C++的异常处理机制。
C++的异常处理机制的基本结构如下:
try {
// 可能会产生异常的代码
}
catch(Exception e) {
// 异常处理
}
try保护着会产生异常的代码块,catch则处理这些异常。当异常发生时,try块之后的代码将不会被执行,而是直接跳转到catch块。如果try块中没有异常产生,catch块也不会被执行。
抛出异常
为了在程序中抛出异常,可以使用throw语句。
throw exception_type;
exception_type是异常的类型,可以是一个已经定义的数据类型,也可以是一个自己定义的类型。
我们可以通过定义一个异常类来抛出自定义异常:
class MyException : public exception {
public:
MyException(const char* message) : _message(message) {}
virtual const char* what() const throw() {
return _message.c_str();
}
private:
string _message;
};
上面的代码定义了一个MyException类,继承自exception类。MyException构造函数带有一个message参数,用于传递异常信息。what()方法是必须重载的,用于返回异常信息。在引发异常时,可以通过new操作符动态创建MyException对象,把这个对象抛给catch块。
我们用一个例子来说明抛出异常的过程。下面这个函数会抛出一个MyException异常:
void do_something() {
// 如果发生条件,则抛出异常
if( something_is_wrong ) {
throw MyException("something is wrong!");
}
}
捕获异常
当我们抛出异常时,可以使用catch语句来捕获异常并进行处理。catch语句有多种形式:
catch(exception_type e) {
// 处理异常
}
catch(exception_type& e) {
// 处理异常,e是一个引用
}
catch(...) {
// 捕获任意类型的异常
}
catch可以捕获指定类型的异常,也可以捕获任意类型的异常。
我们用一个例子来说明捕获异常的过程。下面这个函数会调用do_something函数,并且处理do_something函数可能抛出的异常:
void main() {
try {
do_something();
}
catch(MyException& e) {
cout << "Caught my exception: " << e.what() << endl;
}
catch(exception& e) {
cout << "Caught standard exception: " << e.what() << endl;
}
catch(...) {
cout << "Caught unknown exception." << endl;
}
}
在这个例子中,main函数调用了do_something函数,并且使用try-catch块来处理可能抛出的异常。在捕获异常之后,我们可以使用异常对象的what方法来获取异常信息。
下面是一个完整的例子,演示了如何使用C++的异常处理机制。
#include <iostream>
#include <exception>
#include <string>
using namespace std;
class MyException : public exception {
public:
MyException(const char* message) : _message(message) {}
virtual const char* what() const throw() {
return _message.c_str();
}
private:
string _message;
};
void do_something() {
// 如果发生条件,则抛出异常
if( true ) {
throw MyException("something is wrong!");
}
}
void main() {
try {
do_something();
}
catch(MyException& e) {
cout << "Caught my exception: " << e.what() << endl;
}
catch(exception& e) {
cout << "Caught standard exception: " << e.what() << endl;
}
catch(...) {
cout << "Caught unknown exception." << endl;
}
}
该程序会抛出一个MyException异常,然后在catch语句中进行异常处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇文章带你入门C++的异常处理 - Python技术站