在 C++ 语言中,如果一个函数可能抛出异常,那么一定要在 try 子句里调用这个函数。
答案B。函数必须有函数名。函数可以没有参数,可以没有返回值(void类型),定义可以在调用之后(需提前声明)。
函数必须有名称,但可以有默认参数。参数默认以值传递(传值)。函数未被调用时参数不占内存。
【考点】异常处理|C++语法|try-catch结构
考纲定位:GESP四级"程序调试与异常"模块必考项。命题人专门卡"异常抛出"与"异常捕获"的位置关系——绝大多数考生只背了"try-catch成对出现"的结论,却完全忽略了"抛异常"本身不需要try包裹。四级大纲明确要求掌握"异常抛出与捕获的语法位置",这道题就是直接考察这一细节。
解题思维:看到题先想"try子句到底管什么?"它只管捕获,不管抛出。关键观察是"抛异常的位置"和"捕获异常的位置"是两个独立的语法概念。推理链:函数内用throw抛出,try块用catch捕获;因此"抛出函数时一定在try里"是偷换概念的绝对化表述。这一类题的通法是:先明确"抛出"与"捕获"的职责分工,再判断条件是否混淆了两者。
陷阱拆解:选项A是典型的偷换概念陷阱——利用考生对"try-catch结构"的模糊记忆,把"抛异常位置"偷换成"try子句位置",诱导考生误以为"捕获异常"和"抛出异常"是同一件事。最阴险的细节是"一定"这个词,绝对化表述,但C++允许在函数内部直接抛异常,根本不需要try包裹。如果你只背结论、不理解本质,就会掉进这个陷阱。
反命题思维:如果把"try子句"改成"catch子句",答案就变成A正确了,因为catch确实要在抛出异常后处理。命题人常通过更换关键词(如把"try"换成"catch")来制造新陷阱,答案会反转。刷到类似题时,先问自己"命题人想考我什么",是考语法细节还是逻辑概念。