How can I know the name of the exception in C++?
使用python,我可以很容易地得到异常的名称,如下所示。
是否有类似的方法来找到C++的异常名?
当我运行x=3/0时,编译后的二进制文件只会抛出"浮点异常",与python相比,这是不太有用的。
虽然您不能轻易地询问异常的名称,但如果异常是从
1 2 3 4 5 6 7 8 | try { ... } catch (const std::exception &exc) { std::err << exc.what() << std::endl; } |
另一方面,除以0并不保证会引发C++异常(我认为MS平台可以做到这一点,但是在Linux上你不会得到它)。
如果这是一个调试问题,您可以将编译器设置为在遇到异常时中断,这是非常有用的。
对于大多数例外情况,如果在编译器中设置了rtti选项,则可以执行以下操作:
1 2 3 4 | catch(std::exception & e) { cout << typeid(e).name(); } |
不幸的是,被零除引发的异常不是从std::exception派生的,所以这个技巧不起作用。
如果您想知道异常类的名称,可以使用rtti。然而,绝大多数C++代码将抛出一个来自STD::ExtExchange的异常。
但是,您所得到的只是包含在std::exception::what中的异常数据,如果需要更多信息(它包含更多信息),您可以从rtti中获取异常类的名称,并显式地捕获它。