2016-06-30 4 views
-4

나는 어쨌든 함수 std:sort에 던져지는 예외를 잡는 방법을 묻고 싶습니다. 이 코드를 사용해 보았습니다.표준에서 예외 잡기

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

그러나 작동하지 않습니다. 어떤 가능성이 있습니까, 이것을 쓰는 방법은 있습니까?

+4

방법이 작동하지 않습니다 : 그것은 conmarator를 작성 훨씬 쉽게 때문에

, 난 당신에게 그 방법을 보여 드리죠? 무슨 일이야? [mcve]를 만들 수 있습니까? 호기심에서 벗어난 – NathanOliver

+1

, 예외는 무엇입니까? –

+0

디버거에서 예외가 발생했을 때 예외 유형이 표시되면 이름을 붙이십시오. –

답변

4

주석에 따라 다시 : "액세스 위반"- 이것은 OS보고 예외이며 C++ 예외는 아닙니다. 이는 대개 약한 순서를 만들지 않는 비교 객체를 전달한 결과입니다. "[주장]"을 표시하는 것을 귀찮게하지 않으므로 더 이상 진단 할 수 없습니다.

0

The reasons that sort will throw은 다음과 같습니다

  • 요소 비교 그래서 sort의 원인 반복자는

을 던져에
  • 작업을 던져
  • 요소 스왑 (또는 이동)를 던져 잘못된 인수없이 던져 버릴 수 있습니다 (이는 정의되지 않은 b를 유발합니다). ehavior) 사용자 정의 반복자 또는 사용자 정의 비교기를 사용해야합니다.

    try { 
        sort(begin(foo), end(foo), [](auto& lhs, auto& rhs) { 
         throw exception(); 
         return lhs < rhs; 
        }); 
    } catch(...) { 
        cout << "error\n"; 
    }