在std:sort中捕获异常

时间:2016-06-30 17:24:37

标签: c++ exception-handling

我想问一下,如何捕获异常,它在函数std:sort的某处抛出。我试过这段代码

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

然而,它不起作用。有没有可能,怎么写这个?

2 个答案:

答案 0 :(得分:4)

根据评论,re:“访问冲突” - 这是操作系统报告的异常,而不是C ++异常。这通常是传递不会创建严格弱排序的比较对象的结果。既然你没有费心去展示“[参数]”,就不可能再进行诊断了。

答案 1 :(得分:0)

The reasons that sort will throw是:

  
      
  • 元素比较抛出
  •   
  • 元素交换(或移动)抛出
  •   
  • 对迭代器的操作抛出
  •   

因此,要使sort抛出没有无效参数(这会导致未定义的行为),您必须使用自定义迭代器或自定义比较器。

因为编写一个conmarator要容易得多,所以我会告诉你:

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