gpt4 book ai didi

c++ - 捕获异常后确定异常类型?

转载 作者:IT老高 更新时间:2023-10-28 12:29:51 25 4
gpt4 key购买 nike

有没有办法确定异常类型,即使你知道你用 catch all 捕获了异常?

例子:

try
{
SomeBigFunction();
}
catch(...)
{
//Determine exception type here
}

最佳答案

简短回答:不。

长答案:

如果你从一个公共(public)基类型(比如 std::exception)派生所有异常并显式捕获它,那么你可以使用它从你的异常中获取类型信息。

但是您应该使用 catch 的特性来捕获特定类型的异常,然后从那里开始工作。

catch(...) 唯一真正的用途是:

  • 捕捉:并丢弃异常(停止异常转义析构函数)。
  • 捕获:记录发生的未知异常并重新抛出。

编辑:您可以通过 dynamic_cast<>() 或 typid() 提取类型信息虽然如上所述,这不是我推荐的东西。使用 case 语句。

#include <stdexcept>
#include <iostream>

class X: public std::runtime_error // I use runtime_error a lot
{ // its derived from std::exception
public: // And has an implementation of what()
X(std::string const& msg):
runtime_error(msg)
{}
};

int main()
{
try
{
throw X("Test");
}
catch(std::exception const& e)
{
std::cout << "Message: " << e.what() << "\n";

/*
* Note this is platform/compiler specific
* Your milage may very
*/
std::cout << "Type: " << typeid(e).name() << "\n";
}
}

关于c++ - 捕获异常后确定异常类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/561997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com