以下代码只能捕获 int 类型异常。
int main() {
try {
throw 42;
} catch (...) {
cout << "Caught" << endl;
}
return 0;
}答案B。基本数据类型占用内存大小:char(1B)、bool(1B)、int(4B)、float(4B)、double(8B)。指针类型(如int*)通常占8B(64位系统)。
int类型取值范围有限(通常-2³¹~2³¹-1)。指针类型大小在64位系统上为8字节。
【考点】异常处理|catch(...)捕获所有|类型匹配
1. 🎯 考纲定位 GESP四级《基本编程》模块中,异常处理为必考内容。本题精准卡住"catch(...)能捕获任意类型异常"这一基础语义,是命题人设置的经典陷阱,大量考生因混淆具体类型捕获与万能捕获而失分。官方大纲明确将catch(...)列为可捕获任意类型异常,故该题属于基础考点。
2. 🧠 解题思维 解题链:看到catch(...)先识别其为万能捕获块,语义上可捕获任何类型异常,与抛出类型无关。本题抛出int却仍落入catch(...),直接判定原命题错误。通法:遇到catch(...)一律视为捕获所有,不依赖具体类型;若为catch(T&)则仅捕获T及其派生类。需注意catch(...)在捕获顺序中优先级最低,但能捕获所有异常。
3. 🪤 陷阱拆解 错误选项A利用"只能捕获int"的绝对化表述制造陷阱。命题人利用考生将catch(...)与具体类型catch混同的思维定式,若死记"catch(...)只能捕获当前异常"必掉坑。阴险细节是"只能"二字,排除一切其他类型可能;若改为"捕获int类型异常"则语义正确,但原题故意用极端表述增加迷惑性。此题测试考生对异常类型匹配规则的理解深度。
4. 🔄 反命题思维 若将catch(...)改为catch(int&),则原命题成立;或增加catch(...)后接具体catch块,会改变捕获顺序。刷到类似题先问:命题人想考我对catch(...)的语义理解,还是对捕获顺序的掌握?若题目改为"以下代码能捕获int异常吗?"答案仍为是,但本题用"只能"一词制造陷阱,考查考生对异常类型匹配规则的理解深度。
官方答案:B