C++11与使用C++11编译器构建的最新版本Boost(如1.55)之间的互操作性有多广泛?
- 任何库功能的行为是否取决于我是否启用了c++11标志来构建库?
- 像lambda函数这样的语言特性如何与Boost的lambda协同工作?
C++11与使用C++11编译器构建的最新版本Boost(如1.55)之间的互操作性有多广泛?
gcc
编译的对象不能同时使用带有和不带有 -std=c++11
的选项。这会导致链接错误甚至运行时崩溃。我不能保证其他 C++ 实现的情况。所以,至少对于 gcc
,你需要构建一个启用了 c++11 模式的单独版本的 Boost 库。编辑 我看到人们仍然在阅读(并点赞!)这个答案。第一点现在已经不再正确(或者从来就不正确)。从我认为的 5.1 版本开始,gcc
使用与 -std=<anything>
兼容的 ABI(应用程序二进制接口)。
行为不会改变:在代码层面上,Boost与C++03和C++11都兼容。
然而,在对象层面上,您将无法混合使用:如果您的程序编译为C++11,并且您正在使用一些非头文件的Boost库,则必须将这些Boost库也构建为C++11。这是因为每个语言版本的工具链的相应C++运行时不能保证具有ABI兼容性。