通常,异常不得传播模块边界,例如 Herb Sutters C++ 编码标准(第 62 项)中所解释的那样。当使用不同的编译器或仅编译器设置进行编译时,这可能会崩溃。
我可以理解这个问题,例如的动态链接库。但我想知道它是否也适用于静态库。静态库是上述规则意义上的模块吗?如果使用其他编译器设置(例如对齐)编译库,如果从静态库中抛出异常并在应用程序中捕获异常,程序可能会崩溃吗?
通常,静态库必须由相同的编译器和相同的编译器设置(大部分)进行编译,才能与可交付成果(动态库或可执行文件)兼容。
然后,您可以在静态库的边界之外抛出异常,因为它与编译器生成的一组 .obj 文件没有太大区别。而你显然can在不同的 .obj 模块之间抛出异常。
EDIT:
总结一下评论:
- 仅当您使用与编译库相同的编译器和编译器设置时,才能使用静态库。
- 您可以在使用相同编译器和编译器设置编译的模块之间引发异常。
- 从 1) 和 2) 可以看出,您可以从静态库中抛出异常,因为如果您使用它,则意味着您使用相同的编译器和编译器设置,因此您可以抛出异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)