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

选择题 · 答案 B

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

题目

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

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";
    }
}
答案:B

解题思维

答案B。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。

常见错误

指针和数组追踪时画内存布局图可以大大简化理解。

详细解析(节选)

【考点】异常处理(try-catch)|类型匹配(throw vs catch)|C++类型系统(int vs const char*)

1. 🎯 考纲定位 GESP四级 C++ 异常处理模块。命题人把这道题放在这里,就是要卡死"把 throw 0 当成字符串"这个直觉陷阱——学生看到 catch(const char* msg) 就下意识去配"0",却忘了 0 是 int 类型。

2. 🧠 解题思维

3. 🪤 陷阱拆解

4. 🔄 反命题思维 如果我把 throw 0 改成 throw "A",那 catch(const char* msg) 就能捕获,输出变 A;如果改成 throw 0.0,则需要 catch(double) 或 catch(float) 才能匹配。刷到类似题先问自己:抛出的到底是什么类型?

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