我有一个项目被编译到库(静态.lib或动态.dll)中,该库在启用C ++异常的情况下进行编译。 然后我有另一个单独的项目,我无法控制,禁用了异常,并且该项目链接到启用了异常的库(并且显然使用了它所链接的库中的类和函数)。 / p>
要澄清:
这是受支持的方案,还是导致未定义的行为或类似的结果? 假设在.lib中,我捕获了所有可能发生的异常并进行了处理,并且没有任何异常被“泄漏”或扔出.lib回到没有启用异常的项目中。
这是否有效取决于平台(Win / Linux / macOS等)还是编译器(MSVC / clang / gcc)? 是否取决于是将库创建为静态库还是将其链接为动态库?
如果有关系,这些项目将以C ++ 14模式编译。
This question有点相关,它基本上说“不允许异常在两段代码之间传播”(除非它们具有完全相同的编译器标志)。但这并不能具体回答我的问题,也就是说,鉴于我捕获了所有异常(理论上,任何异常都不应跨越边界),将启用了异常的库链接到禁用了异常的项目。