考虑以下C++代码:
try {
throw foo(1);
} catch (foo &err) {
throw bar(2);
} catch (bar &err) {
// Will throw of bar(2) be caught here?
}
我认为答案是否定的,因为它不在try
代码块中,在另一个问题中Java的答案也是否定的,但我想确认C++也是否定的。是的,我可以运行一个测试程序,但我想知道远程情况下编译器行为的语言定义,以防我的编译器有错误。
考虑以下C++代码:
try {
throw foo(1);
} catch (foo &err) {
throw bar(2);
} catch (bar &err) {
// Will throw of bar(2) be caught here?
}
我认为答案是否定的,因为它不在try
代码块中,在另一个问题中Java的答案也是否定的,但我想确认C++也是否定的。是的,我可以运行一个测试程序,但我想知道远程情况下编译器行为的语言定义,以防我的编译器有错误。
不可以。只有在相关的 try
块中抛出的异常才能被 catch
块捕获。
void doSomething()
{
try
{
throw foo(1);
}
catch (foo &err)
{
throw bar(2);
}
catch (bar &err)
{
// Will throw of bar(2) be caught here?
// NO It cannot & wont
}
}
int main()
{
try
{
doSomething();
}
catch(...)
{
//Catches the throw from catch handler in doSomething()
}
return 0;
}
main()
函数中的catch块将捕获bar(2)
。这样可以使答案更加清晰。 - zar