首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有C++03源代码的C++11库

带有C++03源代码的C++11库
EN

Stack Overflow用户
提问于 2012-09-28 09:53:44
回答 2查看 3.3K关注 0票数 11

如果我有用C++03编写的库,并将其编译成静态库,那么我可以在C++11中使用它吗?也是反向可能的(带有C++11静态库的C++03 )。

更新:我使用的编译器是clang或LLVM。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-29 04:52:14

这主要取决于如何在库中使用C++标准库。

  • 如果你根本不使用它,那么你就不会遇到任何问题。
  • 如果使用libstdc++,则可能会遇到一些问题:

代码语言:javascript
复制
- Passing standard library objects to and from your library will not always work (for instance, `std::list` in C++11 mode will eventually be larger than it currently is in C++98 mode, because it is growing a `size` data member, and the representation of `std::string` is changing to a non-reference-counted one). The g++ developers have a plan to introduce a form of symbol tainting to catch these issues at link time, so you will get errors if you hit any of the problematic cases, but this has not been implemented yet in g++ and may never be implemented in Clang. You can avoid this problem by ensuring that your library's interface does not involve standard library types.
- Some symbols may change meaning (for instance, `std::complex::real` and `std::complex::imag` return references in C++98 mode, but return by value in C++11 mode, due to a `constexpr` deficiency). If you link together (unoptimized) code using both the C++98 and C++11 forms, you may have the wrong implementation chosen, with strange results at runtime.

  • 如果您使用libc++,您应该不会看到任何问题。libc++被设计成C++98和C++11模式之间的二进制兼容。
  • 如果在库中使用libc++,在程序中使用libstdc++,或者在程序中使用libstdc++,那么大多数不兼容将在链接时捕获。(libc++namespace std中使用包含其大部分符号的inline namespace,如果您试图跨边界传递libstdc++的类型,则会导致链接时间不兼容)。但是,如果库的接口间接包含标准库类型(例如,如果它使用具有标准库类型的struct作为成员),则可能仍然存在运行时问题。对于libc++不进行版本的类型,它的目标是二进制兼容libstdc++ (在C++98和C++11模式下)。
票数 16
EN

Stack Overflow用户

发布于 2012-09-28 10:08:57

取决于编译器。例如,GCC破坏了在C++11中在C++11模式下不同变化的标识符。因此,例如,如果您不使用诸如std::list之类的东西,那么您就没事了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12637699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档