执行下面程序时,catch (int e) 能够捕获由 throw "Error" 抛出的异常,因此程序输出 Caught 。
int main() {
try {
throw "Error";
} catch (int e) {
cout << "Caught";
}
return 0;
}看到异常捕获题先想类型兼容性。C++异常捕获要求抛出的类型与catch参数类型精确匹配或派生关系,字符串字面量"Error"类型是const char*,与int毫无关系,因此catch(int e)无法捕获该异常。
选项A利用"catch能捕获任意异常"的直觉误区,混淆了C++与Java异常机制;易错点在于忽视const char*与int的类型鸿沟,误以为catch(int)可捕获任何异常。
本题考查GESP四级C++《异常处理》模块的核心规则。命题人专门设置这道题,就是要卡住那些凭直觉做题的考生——他们往往认为"catch能捕获任意异常",却忽略了C++异常类型匹配的严格性。
看到题先定位throw语句:throw "Error"抛出的是字符串字面量,其类型是const char*。再看catch子句:catch(int e)只捕获int类型。C++异常匹配规则是:catch参数类型必须与抛出类型完全一致,或抛出类型是catch参数的派生类。const char*与int既不相等,也无继承关系,因此不匹配。程序执行到throw "Error"时,异常栈中只有const char*类型的异常对象,而catch(int e)无法处理它,异常会向上传播,由于main函数中没有其他catch子句,程序直接终止,cout << "Caught"永远不会执行。