当前位置:  开发笔记 > 编程语言 > 正文

`std :: terminate`如何知道特别处理`std :: exception`s?

如何解决《`std::terminate`如何知道特别处理`std::exception`s?》经验,为你挑选了1个好方法。

这个

#include 
struct A /*: public std::exception*/ {
  const char* what() const noexcept { return "this is A";  } 
};
int main(){
  throw A{};
  return 0;
}

给我(上stderr):

terminate called after throwing an instance of 'A'
Aborted (core dumped)

如果我取消注释,死亡消息将变为:

terminate called after throwing an instance of 'A'
what():  this is A
Aborted (core dumped)

怎么std::terminate知道std::exception特别对待s?

我怎么能在自己的模仿中做到这一点set_terminate?我试过了

//...
int main(){
  std::set_terminate([](){
      printf("exception thrown\n");
      std::exception_ptr eptr = std::current_exception();
      std::exception* ptr =  dynamic_cast(eptr);
      if (ptr) 
        puts(ptr->what());
  });
  throw A{};
}

但它不会因为该dynamic_cast行而编译.



1> Sam Varshavc..:

最有可能的原因是,如果动态转换成功,它只是尝试将dynamic_cast其转换为a std::exception,并调用虚what()方法.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有