C++学习之异常机制详解
什么是异常机制
C++的异常机制可以帮助我们处理程序运行时可能出现的意外状况,而在这些意外状况中,有些可能无法在程序设计时被完全预见,这个时候异常机制就可以帮助我们在程序出现异常时,优雅地终止程序,同时保证程序的稳定性。
C++异常机制的使用
C++的异常机制通过 try
和 catch
块来实现,其中 try
块用来包含可能会抛出异常的代码,而 catch
块用来捕获并处理相应的异常。下面是一个基本的异常机制语法的示例:
try {
// 可能会抛出异常的代码
} catch (异常类型1 e1) {
// 处理异常类型1
} catch (异常类型2 e2) {
// 处理异常类型2
} catch (...) {
// 处理其他所有未处理的异常
}
在 try
块内如果代码出现异常,就会进入相应异常类型的 catch
块,其中的 e1
和 e2
就是对应异常类型的对象,我们可以通过调用其成员函数或者输出其成员变量来处理或者输出相应的异常信息。而对于 catch (...)
,它可以用来捕获所有未被处理的异常,通常作为异常机制的最后一道防线。
另外,我们还需要注意的是,捕获异常类型的顺序很重要,应该最先捕获常量引用类型的异常对象,最后再捕获不带参数的 catch
块。(详见为什么catch(...)应该最后一个被调用)
C++标准异常类
C++为我们提供了一些标准的异常类,我们可以继承这些异常类,也可以直接使用这些异常类来抛出异常,下面是常见的几类标准异常类:
std::exception
:所有标准异常类最终都是从该类继承而来。std::logic_error
:代码存在错误,在编写程序时可以避免的异常。std::runtime_error
:程序虽然没有错误,但由于环境等原因导致无法完成操作的异常。
我们也可以通过 what()
函数来获取异常的信息,例如:
try {
// 可能会抛出异常的代码
} catch (std::range_error &e) {
std::cout << "range_error: " << e.what() << std::endl;
} catch (std::exception &e) {
std::cout << "exception: " << e.what() << std::endl;
} catch (...) {
std::cout << "other exception" << std::endl;
}
C++自定义异常类
除了使用标准异常类外,我们还可以自定义异常类,例如:
class my_exception : public std::exception {
public:
const char* what() const throw() {
return "my_exception happened";
}
};
在抛出异常时,我们可以像下面的代码一样来使用我们自定义的异常类:
try {
throw my_exception();
} catch (std::exception &e) {
std::cout << "exception: " << e.what() << std::endl;
}
这样我们就可以自己定义异常类并使用它们来抛出异常了。
示例说明
示例1 - 抛出标准异常
下面的代码演示了如何抛出并捕获 std::runtime_error
类型的标准异常,并输出异常信息:
#include <iostream>
#include <stdexcept>
int main() {
try {
throw std::runtime_error("runtime error happened");
} catch (std::runtime_error &e) {
std::cout << "runtime_error: " << e.what() << std::endl;
} catch (std::exception &e) {
std::cout << "exception: " << e.what() << std::endl;
}
return 0;
}
输出结果为:
runtime_error: runtime error happened
示例2 - 自定义异常类
下面的代码演示了如何自定义异常类,并使用它来抛出并捕获异常,也输出异常信息:
#include <iostream>
#include <exception>
class my_exception : public std::exception {
public:
const char* what() const throw() {
return "my_exception happened";
}
};
int main() {
try {
throw my_exception();
} catch (std::exception &e) {
std::cout << "exception: " << e.what() << std::endl;
}
return 0;
}
输出结果为:
exception: my_exception happened
以上就是对于“C++学习之异常机制详解”的完整攻略了,期望对您了解C++异常机制有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++学习之异常机制详解 - Python技术站