C++ 中异常类型的处理机制是怎样的,常见异常类型有哪些?
C++ 中异常类型的处理机制及常见异常类型
在 C++ 编程里,异常处理机制是一个十分关键的部分,它能帮助我们更好地应对程序运行时出现的各种意外状况,让程序的稳定性和健壮性得到提升。下面就来详细聊聊 C++ 中异常类型的处理机制以及常见的异常类型。
C++ 异常处理机制
C++ 的异常处理机制主要由三个关键字构成,分别是 try
、catch
和 throw
。我们可以把可能会抛出异常的代码块放在 try
语句块中,要是在这个代码块里发生了异常,就会使用 throw
关键字来抛出异常。之后,程序会跳转到相应的 catch
语句块中对异常进行处理。
下面是一个简单的示例:
#include <iostream>
int divide(int a, int b) {
if (b == 0) {
throw "Division by zero!";
}
return a / b;
}
int main() {
try {
int result = divide(10, 0);
std::cout << "Result: " << result << std::endl;
} catch (const char* msg) {
std::cerr << "Error: " << msg << std::endl;
}
return 0;
}
在这个例子中,divide
函数在除数为 0 时会抛出一个异常。在 main
函数里,我们把 divide
函数的调用放在 try
语句块中,当异常被抛出时,就会进入 catch
语句块对异常信息进行输出。
常见异常类型
标准库异常
C++ 标准库定义了一系列的异常类,这些类都继承自 std::exception
基类。常见的标准库异常类型有:
std::bad_alloc
:当使用new
运算符进行动态内存分配失败时,就会抛出这个异常。std::out_of_range
:当使用std::vector
、std::string
等容器时,如果访问的下标超出了容器的有效范围,就会抛出该异常。std::invalid_argument
:当传递给函数的参数不合法时,会抛出这个异常。
自定义异常
除了标准库异常,我们还能根据实际需求自定义异常类。自定义异常类通常会继承自 std::exception
或者它的某个派生类。下面是一个自定义异常类的示例:
#include <iostream>
#include <exception>
class MyException : public std::exception {
public:
const char* what() const noexcept override {
return "My custom exception!";
}
};
void test() {
throw MyException();
}
int main() {
try {
test();
} catch (const std::exception& e) {
std::cerr << "Exception caught: " << e.what() << std::endl;
}
return 0;
}
在这个示例中,我们定义了一个名为 MyException
的自定义异常类,并重写了 what
函数来返回异常信息。
总之,掌握 C++ 的异常处理机制和常见异常类型,能够让我们在编写程序时更有效地处理各种意外情况,提升程序的质量和稳定性。无论是使用标准库异常,还是自定义异常,都要根据具体的需求和场景来合理运用。