は、このコードを考えてみましょう:ここ例外、C++
int main()
{
try
{
throw std::range_error("");
}
catch (std::bad_alloc)
{
std::cout << "AAAA" << std::endl;
throw;
}
catch (std::range_error)
{
std::cout << "BBB" << std::endl;
throw;
}
catch (std::exception)
{
std::cout << "CCC" << std::endl;
}
std::cout << "DDD" << std::endl;
}
私はタイプstd::range_error
の例外をスローし、それをキャッチしようとしています。
論理的に最初のcatch
ブロックは、タイプの不一致(std::bad_alloc
およびstd::range_error
)のためにキャッチできません。
2番目のcatchブロックは、同じタイプのstd::range_error
であるため、キャッチする必要があります。
また、2番目のcatchブロックで例外を再現するときは、3番目のcatchブロックでcatchする必要があります。
だから私の出力は
BBB
CCC
DDD
でなければなりません。しかし、私は唯一の終了にBBB
出力を取得します。
誰でも私にその行動を説明していただけますか?
出力はあなたの第二スロー 'try'ブロックでは発生しませんでした。だからそれは捕まえられない。 – Galik
それはそのようには動作しません。それぞれのtry-catchブロックは、いくつのcatch節があっても、例外で1つのショットしか取得しません。 catch節によってスローされた例外は、そのtry-catchブロックで捕捉されません。 – davidbak
これは、例外タイプのブロックを多数取得しても、最初のものだけが例外をキャッチすることを意味します。 –