什么时候抓住了一个例外?

时间:2014-04-22 22:19:08

标签: c++ exception try-catch terminate

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

#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 non-null”之后)所述消息(使用clang ++和std=c++11)。那么,当完全被捕获并因此被认为未被捕获时,terminate()没有报告(再次)?或者,等价(或不是?):如何捕获异常,报告其what()terminate()而不获得此模糊?

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

1 个答案:

答案 0 :(得分:2)

由于没有人提供这方面的答案,而且我的评论似乎不够明确或被忽视,我会发表一个完整的答案:

  

或者,等价(或不是?):如何捕获异常,报告what()和terminate()而不获取此模糊?

如果您通过the reference仔细阅读,默认情况下会std::terminate()注意abort(),这会导致程序终止返回与平台相关的不成功终止主机环境的错误代码。

现在,回答引用的问题:要么使用exit(int status)(这是better solution,因为您处理了例外)而不是terminate change 终止处理程序