在std:sort中捕获异常
catching an exception in std:sort
我想问,如何捕获异常,这是在函数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";
}
相关文章:
- 当类定义不可见时捕获异常
- 来自 Android 应用程序内部的 boost 类型的 boost::wrapexcept<boost::system::system_error> 的未捕获异常
- 如何通过 pybind11 从 python 中的C++中捕获异常?
- 信号后未捕获异常
- 捕获异常后如何退出程序执行
- C++ 捕获异常后进行清理的标准方法是什么?
- 使用模板类引发和捕获异常
- E/libc++abi:终止于类型为google::protobuf::FatalException的未捕获异常
- 如果在生成 std::thread 后引发,则未捕获异常
- C++ 未捕获异常,程序将终止并中止
- C++程序在第一次尝试时会给出垃圾,但如果它捕获异常并重试,则会给出适当的值
- 仅捕获异常就可以检测所有二进制文件在C 中读取错误是否足够
- 如何捕获 I/O 异常(确切地说是 I/O,而不是 std::exception)
- 为什么捕获异常播放允许尾括号
- throw() 函数应该总是在异常时展开堆栈并允许捕获异常还是必须调用 std::terminate ?
- 寻求与类型为 std::invalid_argument 的未捕获异常相关的运行时错误的建议: stoi:无转换
- 如何从调用函数中捕获异常
- 当用户在字符数组中输入整数值时捕获异常
- C++按值捕获异常时的示例是不好的
- 在std:sort中捕获异常