第一节 · 匹配想法 · 正则表达式
程序运行时总会遇到各种意外情况。异常处理提供了一种结构化的方式来处理运行时错误。
基本异常处理
#include <stdexcept>
double divide(double a, double b)
{
if (b == 0)
{
throw runtime_error("Division by zero!");
}
return a / b;
}
int main()
{
try
{
cout << divide(10, 2) << endl; // 5
cout << divide(10, 0) << endl; // 抛出异常
}
catch (const runtime_error& e)
{
cerr << "Error: " << e.what() << endl;
}
cout << "Program continues..." << endl;
return 0;
}异常类层次
多重 catch
自定义异常
noexcept 声明
为什么重要?
移动构造/赋值应该是 noexcept
允许编译器优化
STL 容器会利用 noexcept 信息
异常安全性
RAII 与异常
重新抛出异常
异常与构造函数
function-try-block
习题
实现一个带有详细错误信息的自定义异常类。
解释强异常安全保证与基本异常安全保证的区别。
为什么析构函数不应该抛出异常?
Last updated