3

有人知道在 XCode for iPhone 应用程序中启用 C++ 异常处理的后果吗?默认情况下它似乎被禁用。

C++ 和 Objective C 异常是否相同,或者 C++ 异常只能被 C++ 代码捕获,反之亦然?

谢谢

4

1 回答 1

2

有人知道在 XCode for iPhone 应用程序中启用 C++ 异常处理的后果吗?

这是 C++ 异常处理的正常选择。如果您正在使用 C++ 库,则可能需要启用此功能。

您不能假设异常会干净地跨越图像边界传播。也就是说,您不能假设它被定义为穿过Foundation 框架并在另一侧捕获。IOW,在 MyApp 中抛出 MyLib->through Foundation->catch会导致未定义的行为。因此,您必须假设您需要在 MyLib 中捕获这些内容。

与 OS X 不同,iPhone 的 C++ 和 ObjC 异常不是使用“零成本异常”实现的。由于展开表的大小和编译器支持,没有使用零成本异常,它有利于执行速度而不是大小。

启用例外需要一定的速度和一定的大小——我预计对于 iOS 上的大多数程序来说,这不到 10%。

最终,需要确定是否应该启用异常,它们会引入一些执行和大小开销。除非您正在使用非常专业的 C++ 库,否则您应该假设您需要启用它们。但是,支持该功能。

C++ 和 Objective C 异常是否相同,或者 C++ 异常只能被 C++ 代码捕获,反之亦然?

在 64 位 OS X 和 iOS 环境中,可以使用任一处理程序捕获 C++ 和 ObjC 异常。在 32 位 OS X 中,它们使用不同的异常模型。因此,'catch all' 表达式(用任一语言编写)可以在 iOS 和 64 位 OS X 中捕获C ++ 和 ObjC 异常,但在 32 位 OS X 中不能。

于 2012-04-17T05:24:47.413 回答