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で実行が続行され、ブロック (C# のみ) がある場合は、例外がスローされたかどうかに関係なく実行されます。いずれにせよ、 の直後のコードは決して実行されません。catchfinallythrow

(通常、 /のthrow内部に直接配置することは設計上の問題であることに注意してください。例外は、関数内でのエラー処理ではなく、関数間でエラーを発生させるために設計されています。)trycatch

于 2013-05-31T09:41:30.133 に答える
2

いいえ、例外がスローされた後、その後のコードは実行されないため、戻る必要はありません。

于 2013-05-31T09:42:56.250 に答える
0

メソッドを呼び出しthrowた後、すぐに戻り、それに続くコードは実行されません。try / catchこれは、例外がスローされ、ブロックにキャッチされない場合にも当てはまります。

于 2013-05-31T09:42:45.073 に答える