Boost和C++11之间的互操作性

6

C++11与使用C++11编译器构建的最新版本Boost(如1.55)之间的互操作性有多广泛?

  1. 任何库功能的行为是否取决于我是否启用了c++11标志来构建库?
  2. 像lambda函数这样的语言特性如何与Boost的lambda协同工作?

Lambda函数和Boost的lambda完全不会干扰。它们都只是函数对象。只有C++11的lambda是由编译器生成的,而Boost使用表达式模板。 - sehe
相关链接:https://dev59.com/4lYN5IYBdhLWcg3w4bn1#49119902 - Alex Che
2个回答

6
  1. 使用 gcc 编译的对象不能同时使用带有和不带有 -std=c++11 的选项。这会导致链接错误甚至运行时崩溃。我不能保证其他 C++ 实现的情况。所以,至少对于 gcc,你需要构建一个启用了 c++11 模式的单独版本的 Boost 库。
  2. 它们基本上是独立的。它们不合作也不互相干扰。

编辑 我看到人们仍然在阅读(并点赞!)这个答案。第一点现在已经不再正确(或者从来就不正确)。从我认为的 5.1 版本开始,gcc 使用与 -std=<anything> 兼容的 ABI(应用程序二进制接口)。


2

行为不会改变:在代码层面上,Boost与C++03和C++11都兼容。

然而,在对象层面上,您将无法混合使用:如果您的程序编译为C++11,并且您正在使用一些非头文件的Boost库,则必须将这些Boost库也构建为C++11。这是因为每个语言版本的工具链的相应C++运行时不能保证具有ABI兼容性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接