我如何知道C++中异常的名称?

2 投票
4 回答
972 浏览
提问于 2025-04-16 00:24

在Python中,我可以很简单地获取异常的名称,步骤如下:

  1. 运行代码,比如说 x = 3/0,这样就会在Python中引发一个异常。
  2. 出现的错误信息“ZeroDivisionError: integer division or modulo by zero”告诉我这是一个ZeroDivisionError(除零错误)。
  3. 修改代码,比如用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上你就不会看到这个情况)。

撰写回答