2017-03-14 42 views
1

我是一个java开发人员,试图维护一些非常古老的C++代码(仍然需要使用vs2010编译)。在C++中捕获和重新抛出异常

我在家试图理解无法测试的东西的例外,所以很抱歉,如果这个问题是愚蠢的。

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

这很复杂,因为我正在编写本机代码,调用托管代码,调用c#,调用我的java rest资源。那么在那里我有什么水平,我绝对必须赶上并转换然后再投掷。

预先感谢您。

编辑:由于Jesper已经回答了上半场,我的本地代码是否可以处理system :: exception?

+0

“没有能力测试的东西”当然你可以测试http://ideone.com/nAwbt2。 – bolov

+4

_“是否有任何级别,我绝对必须抓住并转换然后重新抛出”_是当你穿过ABI /语言边界时。 –

+4

非常小心抛出异常。除非抛出站点和catch站点之间的代码是在写出例外安全(RAII等)的情况下编写的,否则很容易搞乱程序状态。这不像Java中那么简单。 – StoryTeller

回答

6

“你可以在低级函数中抛出一个异常,只是在顶部捕捉它” - 是的。

“它是否必须在每个级别都被捕获并重新抛出?” - 没有。