GESP 四级 · GESP 202309 C++ 四级 第 23 题

判断题 · 答案 B

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

题目

一个可能抛出异常的函数,调用它的位置没有在 try 子句中,会引起编译错误。

答案:B

解题思维

这题考的是异常处理机制的边界,别被'抛出异常'吓住,先想编译器管什么、运行时管什么,再对比选项里偷换概念的陷阱。

常见错误

最容易错在把'运行时可能崩溃'当成'编译期必须报错',或者死记'有异常就得 try',忽略了 C++ 里只有写 noexcept 或 throw() 这种显式契约时,编译器才会在 try 外调用报错。

详细解析(节选)

【考点】异常处理机制|编译期检查|运行时异常传播

调用可能抛出异常的函数时,编译器不会强制要求用 try 包裹。异常会在运行时抛出,若未被捕获则按栈回溯传播,最终导致程序终止。这属于运行时行为,与编译期语法无关。

选项 A 把'运行时未捕获'偷换为'编译期错误',利用了初学者对异常处理机制的误解。C++ 允许函数在 try 外调用,只要函数声明不强制抛出异常(如不写 throw()),编译器就不报错。命题人专门用'编译错误'这个绝对化表述来测试你是否分清编译期与运行期的边界。

若函数声明为 throw() 或 noexcept,则调用必须处理异常,此时命题会变为真。刷题时先问自己:题目是否在混淆编译期与运行期的边界?

再结合考频看,函数定义与调用在 GESP 四级已考过 23 题,2023 年更是高频点(15 题),说明这类概念辨析是命题人常设的'坑'。预测未来四级仍会侧重'编译期 vs 运行时'的绝对化表述陷阱,但不再单纯考'有异常必须 try',而是更灵活地结合 noexcept 等契约。

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