我如何知道C++中异常的名称?
在Python中,我可以很简单地获取异常的名称,步骤如下:
- 运行代码,比如说 x = 3/0,这样就会在Python中引发一个异常。
- 出现的错误信息“ZeroDivisionError: integer division or modulo by zero”告诉我这是一个ZeroDivisionError(除零错误)。
- 修改代码,比如用try: x=3/0 except ZeroDivisionError: 来处理这个异常,做一些其他的事情。
那么在C++中,有没有类似的方法来找到异常的名称呢?
当我运行 x = 3/0 时,编译后的程序只会抛出“Floating point exception”(浮点异常),这相比于Python来说就没那么有用。
4 个回答
1
如果这是一个调试的问题,你可以设置你的编译器,让它在遇到错误时停止,这样会非常有帮助。
1
如果你想知道异常类的名字,可以使用RTTI(运行时类型信息)。不过,大部分C++代码抛出的异常都是从std::exception这个类派生出来的。
不过,你得到的只是std::exception::what里面的异常数据。如果你需要更多信息,可以通过RTTI获取异常类的名字,并且可以明确地捕获这个异常(而且它包含更多的信息)。
4
虽然你不能直接询问异常的名称,但如果这个异常是从 std::exception
这个类派生出来的,你可以通过 what()
方法来获取它出现的具体原因:
try
{
...
}
catch (const std::exception &exc)
{
std::err << exc.what() << std::endl;
}
顺便提一下,除以0并不一定会在C++中引发异常(我觉得在微软的平台上可能会这样,但在Linux上你就不会看到这个情况)。