try块中的一个语句中的异常是否会导致控制流绕过try块中的任何剩余语句?

时间:2012-10-28 17:30:39

标签: c++ exception try-catch

我有一些看起来像这样的C ++代码:

void Student::addCourse(Course cVal, string gr) throw(...) {
    try {
        GradedCourse c(cVal, gr);  // If an exception is thrown here...
        coursesTaken.insert(c);    // will this statement be executed?
    } catch(...) {
        throw;
    }
}

GradedCourse构造函数可能会抛出异常,如果构造函数发现包含课程成绩的gr无效。如果发生此类异常,是否会执行try块中的任何进一步语句?我可以确定这样的异常会导致不会尝试将GradedCourse插入coursesTaken(这是一个STL集)吗?我搜索了Stack Overflow和Google,但没有取得多大成功。

2 个答案:

答案 0 :(得分:2)

没有

如果GradedCourse c(cVal, gr);抛出异常,则try块内的任何其他内容都不会被执行。

答案 1 :(得分:0)

现在我明白你要问的是什么,但你的头衔和问题本身都在提出相互矛盾的问题。 :)

如果在try块内抛出异常,执行会立即跳转到处理该异常的catch块,绕过所有其他语句。

Here is the documentation on exceptions.它没有直接解决您的问题,但它确实涵盖了其他重要的事情,例如异常嵌套或链接异常处理程序。