异常处理机制与常用方法
异常处理机制与常用方法
了解异常处理机制,掌握异常处理的常用方法。
当程序遇到无法正常继续的错误(如非法输入、越界访问风险)时,可用 try / catch 捕获异常,避免直接崩溃。try 块放可能出错的代码;catch (类型 e) 处理对应异常;throw 可主动抛出。四级以基础语法和常见场景为主,不要求复杂继承体系。
客观题常考:try 中 throw 后哪些语句不再执行、catch 顺序是否匹配类型、未捕获异常会怎样。120 分钟笔试里也可能判断「哪些情况适合用异常而非返回错误码」——通常用于罕见、难以在各层传递的错误路径。
try {
int a, b; cin >> a >> b;
if (b == 0) throw runtime_error("div by zero");
cout << a / b;
} catch (const exception &e) {
cout << "error";
}
四级掌握基本 try-catch-throw 流程即可;日常刷题仍应优先保证逻辑正确、少触发异常。
运行下面的代码,将出现什么情况?( )
double hmean(double a, double b) {
if (a == -b )
throw runtime_error("Runtime error occurred");
return 2.0*a*b/(a + b);
}
int main() {
double x = 10;
double y = -10;
try {
int result = hmean(x, y);
cout << "hmean: " << result << endl;
}
catch (const runtime_error& e) {
cout << "Caught: " << e.what() << endl;
} catch (...) {
cout << "Caught an unknown exception." << endl;
}
return 0;
}
在 C++语言中,如果一个函数可能抛出异常,那么一定要在 try 子句里调用这个函数。
运行下面的代码,将出现( )。
double hmean(double a, double b) {
if (a == -b )
throw runtime_error("Runtime error occurred.");
return 2.0*a*b/(a + b);
}
int main() {
double x = 10;
double y = -10;
try {
int result = hmean(x, y);
cout << "hmean: " << result << endl;
}
catch (const runtime_error& e) {
cout << "Caught: " << e.what() << endl;
} catch (...) {
cout << "Caught an unknown exception." << endl;
}
return 0;
}
未捕获异常会调用 std::terminate 终止程序。
在 C++ 中,异常处理机制(try-catch 块)的主要目的是( )。
如果一个异常在 try 块中抛出但没有任何 catch 匹配,它将在编译时报错。
关于异常处理,以下说法错误的是( )。
以下代码只能捕获 int 类型异常。
int main() {
try {
throw 42;
} catch (...) {
cout << "Caught" << endl;
}
return 0;
}
执行下面 C++ 代码,会输出( )。
int divide(int a, int b) {
if(b == 0) throw "Division by zero";
return a / b;
}
int main() {
int result = 0;
try {
result = divide(10, 0);
cout << "A";
}
catch(const char* msg) {
cout << "B";
result = -1;
}
cout << result;
return 0;
}
执行下面程序,输出结果是( )。
int divi(int a,int b){
if(b==0) throw 0;
return a/b;
}
int main(){
try{
cout << divi(10,0);
}catch(const char* msg){
cout << "A";
}catch(int){
cout << "B";
}
}
在“模拟实验室”程序中,为了防止除以 0 导致崩溃,小杨使用了异常处理机制。执行以下代码将输出( )。
try {
int x = 10, y = 0;
if (y == 0) throw "Zero Error";
cout << x / y;
} catch (int e) {
cout << "Error Code: " << e;
} catch (const char* msg) {
cout << "Caught: " << msg;
}