2016-06-30 19 views
-4

私は、関数std:sortのどこかにスローされた例外をキャッチする方法を尋ねたいと思います。私はこのコードを試しましたstd:sortで例外をキャッチする

try 
{ 
    sort([arguments]) 
} 
catch(...) 
{ 
    cout << "error"; 
} 

しかし、それは動作しません。これを書く方法はありますか?

+4

それは動作しませんどのように?何が起こるのですか?あなたは[mcve]を作れますか? – NathanOliver

+1

ちょうど好奇心から外れて、何が例外ですか? –

+0

例外の型がデバッガでスローされたときに表示される場合は、名前をキャッチしてみてください。 –

答えて

4

コメントごとに、「アクセス違反」 - これはOSが報告する例外であり、C++の例外ではありません。これは、通常、厳密な弱い順序を作成しない比較オブジェクトを渡した結果です。あなたは "[議論]"を見せてもらっていないので、これ以上診断する​​ことはできません。

0

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"; 
}