C 获取在 catch(...) 块中捕获的异常的描述

新手上路,请多包涵

我能得到一个被捕获的异常的描述吗

catch(...)

堵塞?类似于 std::exception 的 .what()

原文由 MBZ 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 417
2 个回答

您可能可以使用一个技巧:

 catch(...) {
    handle_exception();
}

void handle_exception() {
    try {
        throw;
    } catch (const std::exception &e) {
        std::cout << e.what() << "\n";
    } catch (const int i) {
        std::cout << i << "\n";
    } catch (const long l) {
        std::cout << l << "\n";
    } catch (const char *p) {
        std::cout << p << "\n";
    } catch (...) {
        std::cout << "nope, sorry, I really have no clue what that is\n";
    }
}

依此类推,您认为可能会抛出尽可能多的不同类型。如果您真的对可能抛出的内容一无所知,那么即使倒数第二个也是错误的,因为有人可能会抛出一个 char* 这并不指向一个以 nul 结尾的字符串。

抛出任何不是 std::exception 或派生类的东西通常是一个坏主意。 std::exception 存在的原因是允许每个人投掷和捕捉他们可以做一些有用的事情的对象。在一个玩具程序中,您只想离开那里,甚至懒得包含标准标题,好吧,也许抛出一个 int 或字符串文字。我认为我不会将其作为正式界面的一部分。你抛出的任何异常都是你的正式接口的一部分,即使你不知何故忘记记录它们。

原文由 Steve Jessop 发布,翻译遵循 CC BY-SA 4.0 许可协议

该块可能会捕获一个 int、一个 const char* 或任何东西。当编译器对它一无所知时,它怎么可能知道如何描述它呢?如果要从异常中获取信息,则必须知道类型。

原文由 Puppy 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题