异常处理
1 目标
本文的目的是学习异常处理。
2 示例代码
在 C++ 中,异常处理通过 throw 语句抛出异常,并使用 try-catch 块捕获异常。这种机制可以在运行时处理错误情况,确保程序的稳定性。
#include <iostream>
#include <stdexcept>
#include <string>
// 简单的异常类定义
class MyException : public std::exception {
private:
std::string message;
public:
MyException(const std::string& msg) : message(msg) {}
const char* what() const noexcept override {
return message.c_str();
}
};
// 抛出异常的函数
void riskyFunction(int value) {
if (value < 0) {
throw MyException("负值异常: 值不能为负数");
} else if (value == 0) {
throw std::runtime_error("运行时错误: 值不能为零");
} else {
std::cout << "值是正数: " << value << std::endl;
}
}
int main() {
try {
riskyFunction(10); // 正常情况
riskyFunction(0); // 抛出 std::runtime_error
riskyFunction(-5); // 抛出 MyException
} catch (const MyException& e) {
std::cerr << "捕获到 MyException: " << e.what() << std::endl;
} catch (const std::runtime_error& e) {
std::cerr << "捕获到 std::runtime_error: " << e.what() << std::endl;
} catch (const std::exception& e) {
std::cerr << "捕获到 std::exception: " << e.what() << std::endl;
}
std::cout << "程序继续运行..." << std::endl;
return 0;
}
- 输出
值是正数: 10
捕获到 std::runtime_error: 运行时错误: 值不能为零
程序继续运行...
3 补充
不能处理除0异常!!!
在 C++ 中,标准库提供的异常处理机制可以捕获大多数运行时错误,但对于整数除以零的情况并不会抛出异常。C++ 标准并未规定整数除以零时抛出异常
try {
int a = 0;
int b = 9 / a;
}
catch (const std::exception& e) {
std::cout << "除0异常..." << std::endl;
}