在std:sort中捕获异常

catching an exception in std:sort

本文关键字:捕获异常 sort std      更新时间:2023-10-16

我想问,如何捕获异常,这是在函数std:sort的某个地方抛出的。我试过这个代码

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

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

根据注释,re: "Access violation"——这是一个操作系统报告的异常,而不是c++异常。这通常是传递一个没有创建严格弱排序的比较对象的结果。由于您没有显示"[arguments]",因此无法进一步诊断此问题。

sort会抛出的原因是:

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

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

由于编写一个描述符要容易得多,我将向您展示这种方法:

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