Android NDK / Exceptions?

Android NDK / Exceptions?

本文关键字:Exceptions NDK Android      更新时间:2023-10-16

我读到只有 STL 的 GNU 实现支持C++例外。我不确定它到底是什么意思。

如果我不使用此实现,是否意味着:

  • STL 不会抛出异常,但我仍然可以在任何地方使用我自己的异常。

  • 或者所有异常都被禁用,在每段代码中,就像它们不是C++功能一样?

从 Android NDK 页面:

C++例外

在 NDKr5 之后的所有 NDK 版本中,NDK 工具链允许您使用支持异常处理的C++运行时。但是,为了确保与早期版本的兼容性,默认情况下,它会编译所有支持 -fno 异常C++源。您可以为整个应用或单个模块启用C++例外。

若要为整个应用启用异常处理支持,请将以下行添加到 Application.mk 文件中。要启用对单个模块的异常处理支持,请将以下行添加到其各自的 Android.mk 文件中。

因此,NDK 可以支持 STL,但有例外,但默认情况下它是关闭的。本页详细介绍了当您将-fno-exceptions与 GNU 编译器一起使用时会发生什么(并且 NDK 编译器是基于 gcc 的)。由于此 STL 全部在标头中实现,因此它对异常的使用取决于包含它的代码(例如您的代码)是使用还是没有异常进行编译。如果在代码中使用异常,并使用 -fexceptions 进行编译,则可以在自己的代码中正常使用异常,也可以在 STL 中使用异常。