gpt4 book ai didi

c++ - 究竟什么时候捕获到异常?

转载 作者:行者123 更新时间:2023-11-28 02:50:14 26 4
gpt4 key购买 nike

我得到了这个以未捕获的异常终止,即使我认为我已经捕获了异常。这是一些示例代码

#include <iostream>
#include <stdexcept>

void throwing(int x)
{
if(x) throw std::runtime_error("x non-null");
}

int main()
{
try {
throwing(1);
} catch(std::runtime_error const&ex) {
std::clog << "error: \"" << ex.what() << '\"' << std::endl;
std::terminate();
}
return 0;
}

生成(在报告错误:“x 非空” 之后)所述消息(使用带有 std=c++11 的 clang++)。那么,什么时候确切地 异常被捕获并因此被视为未捕获 terminate() 没有(再次)报告它?或者,等价地(或不是?):我怎样才能捕获异常,报告它的 what()terminate() 而不得到这个 blurb?

(我可以避免报告 what() 而只是报告 terminate(),但我想报告 what()我自己的方式。)

最佳答案

由于没有人对此提供答案,而且我的评论似乎不够清楚或被忽略,我将发布完整答案:

Or, equivalently (or not?): how can I catch an exception, report its what(), and terminate() without getting this blurb?

如果您仔细阅读 the reference ,您会注意到 std::terminate() 默认调用 abort(),这会导致程序终止返回依赖于平台的 unsuccessful termination 主机环境的错误代码。

现在,回答引用的问题:要么使用 exit(int status)(这是一个 better solution,因为你处理了异常)而不是 terminate,或者<强> change 终止处理程序

关于c++ - 究竟什么时候捕获到异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23231279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com