GESP 四级 · GESP202609 C++ 四级 第 14 题

选择题 · 答案 C

← 整套速查表 GESP 四级 全部真题

题目

执行下面程序后,输出结果是(  )。

int main() {
try {
int age = -1;
if (age < 0)
throw age;
cout << "A";
} catch (const char *msg) {
cout << "B";
} catch (int value) {
cout << "C" << value;
}
return 0;
}
答案:C

解题思维

看到异常处理题先想:throw 抛出的类型是什么、catch 块的类型匹配规则、try 块内 throw 后后续代码是否执行。本题核心是 int 异常与 const char* 捕获不匹配,且 throw 后 cout<<"A" 不再执行。

常见错误

陷阱在于 catch(const char *msg) 看似能捕获任何异常,实则只能捕获 const char* 类型;命题人利用"catch 万能"的错觉。另一陷阱是 throw 后 try 块剩余代码被跳过,"A" 不会输出,但考生易忽略执行流中断。

详细解析(节选)

1. 考纲定位

本题考查《GESP 考试大纲》四级 C++ 模块中的异常处理机制。命题人卡住的是考生对"catch 类型匹配"和"异常抛出后执行流中断"两个弱点的综合理解——四级考生常以为 catch 能捕获任意类型,或误以为 throw 后代码继续执行。

2. 解题思维

看到 throw age 先判断 age 的值:age = -1,满足 age < 0,于是抛出类型为 int 的异常。

异常抛出后,try 块剩余代码(cout << "A")立即跳过,不会执行。

接下来按 catch 顺序匹配:

执行 cout << "C" << value,value 为 -1,输出结果为 C-1。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断