执行下面程序后,输出结果是( )。
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;
}看到异常处理题先想:throw 抛出的类型是什么、catch 块的类型匹配规则、try 块内 throw 后后续代码是否执行。本题核心是 int 异常与 const char* 捕获不匹配,且 throw 后 cout<<"A" 不再执行。
陷阱在于 catch(const char *msg) 看似能捕获任何异常,实则只能捕获 const char* 类型;命题人利用"catch 万能"的错觉。另一陷阱是 throw 后 try 块剩余代码被跳过,"A" 不会输出,但考生易忽略执行流中断。
本题考查《GESP 考试大纲》四级 C++ 模块中的异常处理机制。命题人卡住的是考生对"catch 类型匹配"和"异常抛出后执行流中断"两个弱点的综合理解——四级考生常以为 catch 能捕获任意类型,或误以为 throw 后代码继续执行。
看到 throw age 先判断 age 的值:age = -1,满足 age < 0,于是抛出类型为 int 的异常。
异常抛出后,try 块剩余代码(cout << "A")立即跳过,不会执行。
接下来按 catch 顺序匹配:
catch (const char *msg):捕获类型是 const char*,与抛出的 int 不匹配,跳过。catch (int value):捕获类型是 int,与抛出的 int 匹配,执行此块。执行 cout << "C" << value,value 为 -1,输出结果为 C-1。