例外を生成する関数があります。たとえば、次のコード:
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) {
}
そして、最後のブロックがあります-しかし、その後は終了します。
noの場合、戻る必要はありません。
いいえ、例外がスローされた後、その後のコードは実行されないため、戻る必要はありません。
throw
を呼び出した後、メソッドはすぐに戻り、それに続くコードは実行されません。これは、例外がスローされ、try / catch
ブロックでキャッチされない場合にも当てはまります。
Voidメソッドの場合、復帰命令は必要ありません。
それから、投げる命令の後に何かを置くことはできません
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
}