45

我有一个生成异常的函数。例如下面的代码:

void test()
{
    ifstream test("c:/afile.txt");
    if(!test)
    { 
         throw exception("can not open file");
    }
    // other section of code that reads from file.
}

抛出异常后是否需要返回?

c#中的情况是什么?

4

5 回答 5

63

throw通常会导致函数立即终止,所以即使你在它之后放置任何代码(在同一个块内),它也不会执行。这适用于 C++ 和 C#。但是,如果您在try块内抛出异常并且异常被捕获,则将在适当的catch块中继续执行,并且如果存在finally块(仅限 C#),则无论是否抛出异常都会执行。无论如何,紧随其后的任何代码throw都不会被执行。

(请注意,throw直接在try/内部catch通常是一个设计问题 - 异常旨在跨函数冒泡错误,而不是用于函数内的错误处理。)

于 2013-05-31T09:41:30.133 回答
3

严格来说,投掷不一定总是立即终止函数......就像在这种情况下,

try {

     throw new ApplicationException();


} catch (ApplicationException ex) {
    // if not re-thrown, function will continue as normal after the try/catch block

} catch (Exception ex) {

}

然后是 finally 块 - 但之后它将退出。

所以,您不必返回。

于 2013-05-31T09:45:49.663 回答
2

不,您不需要返回,因为在抛出异常之后,之后的代码将不会被执行。

于 2013-05-31T09:42:56.250 回答
0

调用throw该方法后,该方法将立即返回,并且不会执行其后的任何代码。try / catch如果抛出任何异常并且未在块中捕获,这也是正确的。

于 2013-05-31T09:42:45.073 回答
0

如果它是一个 void 方法,您将永远不需要返回指令。

然后你不能在 throw 指令之后放置任何东西,如果有东西被抛出,它将永远不会被使用

void test()
{
    ifstream test("c:/afile.txt");
    if(!test)
    { 
         throw exception("can not open file");
         // If there is code here it will never be reach !
    }
    // other section of code that reads from file.
    //if you place code here it will be reach only if you don"t throw an exception, so only if test == true in your case
}
于 2013-05-31T09:44:15.120 回答