【问题标题】:catching and re-throwing exceptions in c++在 C++ 中捕获和重新抛出异常
【发布时间】:2017-03-14 20:43:51
【问题描述】:

我是一名java开发者,试图维护一些很老的c++代码(还是得用vs2010编译)。

我在家里试图理解异常而没有能力测试东西,如果这个问题很愚蠢,很抱歉。

您可以在低级函数中抛出异常并在顶部捕获它,还是必须在每个级别捕获并重新抛出它?

这很复杂,因为我正在编写本机代码、调用托管代码、调用 c#、调用我的 java REST 资源。那么里面有没有什么关卡我绝对必须捕捉并转换然后重新抛出。

提前谢谢你。

编辑:正如 Jesper 已经回答了前半部分,我的本机代码可以处理 system::exception 吗?

【问题讨论】:

  • "没有能力测试东西"当然可以测试ideone.com/nAwbt2
  • “那里有什么关卡我绝对必须捕捉并转换然后重新抛出” 是的,当你跨越 ABI / 语言边界时。
  • 小心抛出异常。除非 throw 站点和 catch 站点之间的代码是在考虑异常安全的情况下编写的(RAII 等),否则您很容易弄乱程序状态。它不像 Java 中那么简单。
  • @bolov 哎呀刚刚发现链接
  • 是的 - 您需要捕获 C++ 异常并将其转换为适合上层的结果/异常。例如,如果您使用 Java(通过 JNI)调用 C++,您将捕获 C++ 异常,然后在返回 Java 之前使用 JNI 抛出适当的 JAVA 异常,然后从 C++ 代码返回到 Java。

标签: c++ exception managed


【解决方案1】:

“你能否在低级函数中抛出异常并在顶部捕获它” - 是的。

“它必须在每一层都被捕获并重新抛出吗?” - 没有。

【讨论】:

    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 2011-04-08
    • 2013-06-24
    • 2012-03-25
    • 2010-10-27
    • 1970-01-01
    • 2021-04-01
    • 2014-08-18
    相关资源
    最近更新 更多