我想问一下,如何捕获异常,它在函数std:sort
的某处抛出。我试过这段代码
try
{
sort([arguments])
}
catch(...)
{
cout << "error";
}
然而,它不起作用。有没有可能,怎么写这个?
答案 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";
}