1 异常的概念及使用
1.1 异常的概念
异常处理机制允许程序中独立开发部分能够在运行时出现问题时进行通信并做出相应处理。异常使得问题的检测与解决过程分离,程序的一部分负责检测问题,另一部分负责处理,检测环节无须知道处理模块的所有细节。 C 语言主要通过错误码形式处理错误,需要查询错误信息。C++ 异常会抛出一个对象,涵盖更全面的信息。
1.2 异常的抛出和捕获
程序出现问题时,通过抛出(throw)一个对象来引发异常,该对象的类型及调用链决定由哪个 catch 处理代码处理。被选中的处理代码是调用链中与该类型匹配且离抛出位置最近的 catch 块。 当 throw 执行时,后续语句不再被执行,控制权转移到匹配的 catch 模块。这意味着函数可能提早退出,且沿着调用链创建的对象会被自动销毁。 抛出异常对象后,会生成拷贝对象,因为抛出对象可能是局部对象。这类似于函数的传值返回。 C++ 常使用 try-catch 处理异常:try 包裹可能出错的代码,catch 必须与 try 配合使用。
int Divide(int a, int b) {
try {
if (b == 0) {
std::string s("Divide by zero condition!");
throw s; // 抛出 string 类型的异常对象
} else {
return a / b;
}
} catch (int errid) {
std::cout << errid << std::endl;
}
}
void Func(int a, int b) {
try {
std::cout << Divide(a, b) << std::endl;
} catch (const char* errmsg) {
std::cout << errmsg << std::endl;
}
}
int main() {
int a = 0, b = 0;
std::cin >> a >> b;
try {
Func(a, b);
} ( std::string* errmsg) {
std::cout << errmsg << std::endl;
}
;
}


