2014-03-26 40 views
6

C++ 11和使用C++ 11编译器构建的Boost最新版本(比如1.55)之间的互操作性程度如何。Boost和C++之间的互操作性11

  1. 任何库功能的行为是否会根据我是否构建启用了C++ 11标志的库而改变?
  2. lambda函数等语言功能如何与Boost的lambdas配合使用?
+0

Lambda函数和Boost的lambda不会干涉。它们都只是功能对象。只有C++ 11 lambda表达式是编译器生成的,Boost使用表达式模板。 – sehe

回答

6
  1. 不能使用建有gcc与不-std=c++11在一起的对象。你会得到链接错误甚至运行时崩溃。我不能担保其他C++实现。因此,至少在gcc的情况下,您确实需要构建独立版本的启用了C++ 11模式的Boost。
  2. 他们几乎是独立的。他们不合作,不互相干扰。

编辑我看到人们还在读书(和upvoting!)这个答案。点1是不再是真的(或者可能从未如此)。从我认为5.1版本的gcc默认使用与-std=<anything>兼容的ABI。

2

没有行为改变:在代码级Boost与C++ 03和C++ 11兼容。

但是,在对象级别上,您将无法混合匹配:如果您的程序编译为C++ 11,并且您正在使用某些非头文件Boost库,则必须构建这些库像C++ 11一样提升库。这是因为每种语言版本的工具链各自的C++运行时间不能保证具有ABI兼容性。