抛出异常后我需要返回(c ++和c#)

时间:2013-05-31 09:39:34

标签: c# c++ exception

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

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

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

c#是什么情况?

5 个答案:

答案 0 :(得分:44)

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

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

答案 1 :(得分: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) {

}

然后是最后一个块 - 但之后就会退出。

所以没有,你不必返回。

答案 2 :(得分:2)

不,你不需要返回,因为在抛出异常之后,代码就不会被执行了。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如果它是一种无效方法,你将永远不需要返回指令。

然后你不能在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
}