一个可能抛出异常的函数,调用它的位置没有在 try 子句中,会引起编译错误。
这题考的是异常处理机制的边界,别被'抛出异常'吓住,先想编译器管什么、运行时管什么,再对比选项里偷换概念的陷阱。
最容易错在把'运行时可能崩溃'当成'编译期必须报错',或者死记'有异常就得 try',忽略了 C++ 里只有写 noexcept 或 throw() 这种显式契约时,编译器才会在 try 外调用报错。
【考点】异常处理机制|编译期检查|运行时异常传播
调用可能抛出异常的函数时,编译器不会强制要求用 try 包裹。异常会在运行时抛出,若未被捕获则按栈回溯传播,最终导致程序终止。这属于运行时行为,与编译期语法无关。
选项 A 把'运行时未捕获'偷换为'编译期错误',利用了初学者对异常处理机制的误解。C++ 允许函数在 try 外调用,只要函数声明不强制抛出异常(如不写 throw()),编译器就不报错。命题人专门用'编译错误'这个绝对化表述来测试你是否分清编译期与运行期的边界。
若函数声明为 throw() 或 noexcept,则调用必须处理异常,此时命题会变为真。刷题时先问自己:题目是否在混淆编译期与运行期的边界?
再结合考频看,函数定义与调用在 GESP 四级已考过 23 题,2023 年更是高频点(15 题),说明这类概念辨析是命题人常设的'坑'。预测未来四级仍会侧重'编译期 vs 运行时'的绝对化表述陷阱,但不再单纯考'有异常必须 try',而是更灵活地结合 noexcept 等契约。