Kit*_*sto 9 c++ exception static-libraries
通常,异常不得传播模块边界,例如Herb Sutters C++编码标准(第62项)中所述.使用不同的编译器或仅编译器设置编译时,这可能会崩溃.
我可以理解例如动态链接库的问题.但我想知道它是否适用于静态库.静态库是上述规则意义上的模块吗?如果使用其他编译器设置(例如对齐)编译库,则程序可能会崩溃,如果从静态库中抛出异常并在应用程序中捕获?
Ale*_*lex 11
通常,静态库必须由相同的编译器和相同的编译器设置(大多数)编译,以与可交付物(动态库或可执行文件)兼容.
然后,您可以在静态库的边界之外抛出异常,因为它与编译器生成的一组.obj文件没有太大区别.你显然可以在不同的.obj模块之间抛出异常.
编辑:
总结评论:
Herb Sutters的描述也适用于静态库:
C++异常处理没有普遍存在的二进制标准.除非您控制用于构建双方的编译器和编译器选项,否则不允许异常在两段代码之间传播; 否则,模块可能不支持异常传播的兼容实现.通常,这归结为:不要让异常跨模块/子系统边界传播.
| 归档时间: |
|
| 查看次数: |
2322 次 |
| 最近记录: |