Ric*_*ith 15
这主要取决于您如何在库中使用C++标准库.
如果您根本不使用它,那么您不太可能遇到任何问题.
如果您使用libstdc++,那么您可能会遇到一些问题:
将标准库对象传入和传出库并不总是有效(例如,std::list在C++ 11模式下最终会比在C++ 98模式下更大,因为它正在增长size数据成员,并且表示std::string正在改为非参考计数的一个).g ++开发人员计划引入一种符号污染形式,以便在链接时捕获这些问题,因此如果遇到任何有问题的情况,你会遇到错误,但是这还没有在g ++中实现,可能永远不会在铛.您可以通过确保库的接口不涉及标准库类型来避免此问题.
一些符号可改变意思(例如,std::complex::real和std::complex::imag在C++ 98模式返回引用,但通过在值C++ 11模式返回,由于constexpr缺乏).如果使用C++ 98和C++ 11表单链接在一起(未经优化的)代码,则可能选择了错误的实现,在运行时会出现奇怪的结果.
如果您使用libc++,您不应该看到任何问题.libc++被设计为C++ 98和C++ 11模式之间的二进制兼容.
如果您libc++在库和libstdc++程序中使用,反之亦然,那么大多数不兼容性将在链接时捕获.(libc++使用一个inline namespace内namespace std含有大部分的符号,导致链接时不兼容,如果你尝试通过libstdc++跨越边界的类型).但是,如果库的接口间接包含标准库类型(例如,如果它使用struct具有标准库类型的成员),则可能仍然存在运行时问题.对于libc++不版本的类型,它旨在与二进制兼容libstdc++(在C++ 98和C++ 11模式下).
| 归档时间: | 
 | 
| 查看次数: | 2940 次 | 
| 最近记录: |