我有一个生成异常的函数。例如,以下代码:
void test()
{
ifstream test("c:/afile.txt");
if(!test)
{
throw exception("can not open file");
}
// other section of code that reads from file.
}
抛出异常后我是否需要返回?
c#是什么情况?
答案 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
}