我有一个生成异常的函数。例如下面的代码:
void test()
{
ifstream test("c:/afile.txt");
if(!test)
{
throw exception("can not open file");
}
// other section of code that reads from file.
}
抛出异常后是否需要返回?
c#中的情况是什么?
throw
通常会导致函数立即终止,所以即使你在它之后放置任何代码(在同一个块内),它也不会执行。这适用于 C++ 和 C#。但是,如果您在try
块内抛出异常并且异常被捕获,则将在适当的catch
块中继续执行,并且如果存在finally
块(仅限 C#),则无论是否抛出异常都会执行。无论如何,紧随其后的任何代码throw
都不会被执行。
(请注意,throw
直接在try
/内部catch
通常是一个设计问题 - 异常旨在跨函数冒泡错误,而不是用于函数内的错误处理。)
严格来说,投掷不一定总是立即终止函数......就像在这种情况下,
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 块 - 但之后它将退出。
所以不,您不必返回。
不,您不需要返回,因为在抛出异常之后,之后的代码将不会被执行。
调用throw
该方法后,该方法将立即返回,并且不会执行其后的任何代码。try / catch
如果抛出任何异常并且未在块中捕获,这也是正确的。
如果它是一个 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
}