2

次のような C++ コードがあります。

void Student::addCourse(Course cVal, string gr) throw(...) {
    try {
        GradedCourse c(cVal, gr);  // If an exception is thrown here...
        coursesTaken.insert(c);    // will this statement be executed?
    } catch(...) {
        throw;
    }
}

コースの成績を含む がコンストラクターによって無効であることが判明したGradedCourse場合、コンストラクターは例外をスローすることがあります。このような例外が発生した場合、ブロックgr内のステートメントはさらに実行されますか? このような例外が発生すると、(STL セットである)を挿入tryしようとしないと確信できますか? Stack Overflow と Google の両方を検索しましたが、あまり成功しませんでした。GradedCoursecoursesTaken

4

2 に答える 2

2

いいえ。

GradedCourse c(cVal, gr);例外がスローされた場合、tryブロック内の他の処理は実行されません。

于 2012-10-28T17:32:39.770 に答える
0

今、あなたが何を尋ねようとしているのか理解できますが、あなたのタイトルと質問自体は両方とも相反することを求めています. :)

try ブロック内で例外がスローされた場合、実行はすぐにその例外を処理する catch ブロックにジャンプし、他のすべてのステートメントをバイパスします。

ここに例外に関するドキュメントがあります。問題に直接対処するものではありませんが、例外の入れ子や例外ハンドラーの連鎖など、他の重要なことをカバーしています。

于 2012-10-28T17:47:32.060 に答える