私は、関数std:sort
のどこかにスローされた例外をキャッチする方法を尋ねたいと思います。私はこのコードを試しましたstd:sortで例外をキャッチする
try
{
sort([arguments])
}
catch(...)
{
cout << "error";
}
しかし、それは動作しません。これを書く方法はありますか?
私は、関数std:sort
のどこかにスローされた例外をキャッチする方法を尋ねたいと思います。私はこのコードを試しましたstd:sortで例外をキャッチする
try
{
sort([arguments])
}
catch(...)
{
cout << "error";
}
しかし、それは動作しません。これを書く方法はありますか?
コメントごとに、「アクセス違反」 - これはOSが報告する例外であり、C++の例外ではありません。これは、通常、厳密な弱い順序を作成しない比較オブジェクトを渡した結果です。あなたは "[議論]"を見せてもらっていないので、これ以上診断することはできません。
The reasons that sort
will throwは以下のとおりです。
- 要素の比較が
- 要素スワップ(または移動)を投げるイテレータの
- 操作を投げるので引き起こすこと
を投げるsort
無効な引数なしでスローする(これは未定義のbあなたはカスタムイテレータまたはカスタムコンパレータを使用する必要があります。
それはconmaratorを書くことが非常に簡単なので、私はあなたにその方法を紹介します:
try {
sort(begin(foo), end(foo), [](auto& lhs, auto& rhs) {
throw exception();
return lhs < rhs;
});
} catch(...) {
cout << "error\n";
}
それは動作しませんどのように?何が起こるのですか?あなたは[mcve]を作れますか? – NathanOliver
ちょうど好奇心から外れて、何が例外ですか? –
例外の型がデバッガでスローされたときに表示される場合は、名前をキャッチしてみてください。 –