运行下面的代码,屏幕上将输出( )。
#include <iostream>
using namespace std;
int divide(int a, int b) {
if (b == 0) {
throw runtime_error("division by zero error ");
}
return a / b;
}
int main() {
int x = 10;
int y = 0; // 设为 0 会导致除零错误
try {
int result = divide(x, y);
cout << "result: " << result << endl;
} catch (const runtime_error& e) {
cout << "caught an exception: " << e.what() << endl;
}
return 0;
}答案C。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。
指针和数组追踪时画内存布局图可以大大简化理解。
【考点】异常处理|try-catch 块执行顺序
1. 🎯 考纲定位 GESP 四级 C++ 异常处理,考察对 throw 和 catch 的理解,以及异常发生时程序流程的控制。这道题卡住了 80% 考生对"异常中断 try 块"这一执行语义的模糊认知。
2. 🧠 解题思维 main 中 try 执行 divide,b=0 触发 throw,中断 try 块,catch 捕获并打印 e.what()。注意:throw 是抛出异常对象,消息内容只在 catch 内通过 what() 读取,且 try 块内后续代码(如 cout << result)因异常中断根本不会被执行。
3. 🪤 陷阱拆解
try 块内代码会执行(result 未赋值)throw 会打印消息4. 🔄 反命题思维 若 try 块内先打印再抛异常,cout 仍会执行;若 catch 内不调用 what(),则无输出。刷异类题先问:异常何时抛出、何时被捕获、何时输出。