【发布时间】: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。