Boost对C++11的支持如何?

10

Boost本质上是一个c++03库(激发了c++11标准的制定)。我正在考虑使用一些boost库(那些没有在c++11中实现的库)。如果我使用c++11,boost会编译通过吗(可能存在无法复制但可移动对象的问题)?以及boost如何充分利用c++11特性(可变参数模板显然是一些boost库可以使用的东西,而不是使用大量的boost MPL)?(我在boost FAQ中找不到这个答案。)


6
我最大的不满是boost::optional和boost::variant中缺乏移动语义。然而,boost 的其他几个部分确实具有移动语义。 - R. Martinho Fernandes
boost::serialization 库在我上次查看时还不支持 std::shared_ptr - Flexo
我只想指出,移动语义今天下午刚刚被添加到了Boost.Variant中(不,我没有做)。希望它们能在2月的1.53版本中发布。 - Marshall Clow
@flexo。如果还没有该功能,请随意创建一个功能请求。 - Vicente Botet Escriba
2个回答

14

Boost正在向使用C++11特性迈进。

但需要记住的是,Boost不是“一个库”,而是一组库的集合。其中一些库(例如boost::array)可能永远不会更新以使用许多c++11特性。为什么需要这样做呢?因为标准库中已经有了std::array(它是基于boost::array开发的)。

另一方面,Boost希望对仍在使用C++03的人保持有用。

注意:尽管我写得好像“Boost”是某种整体实体,但是有许多人在为Boost做出贡献,他们有着许多不同的观点。 ;-)

要查看各种Boost库与C++11编译器的兼容性如何,您可以查看Boost Testing网页。


+1 给 Boost Testing 链接!是的,我知道 Boost 有很多库。一个(即 Boost)可以使用宏 __cplusplus 的值来启用/利用一些 C++11 特性,但否则保持为 C++03。此外,一些 Boost 开发人员可能对开发 C++11 感兴趣。这就需要任何 Boost 内部依赖在 C++11 下能够良好工作。 - Walter
如果boost :: array没有实现C ++ 11语义,用户编写可移植代码(特别是Boost库)应该使用条件编译,这是不可取的。 - Vicente Botet Escriba
@VicenteBotetEscriba 我这里看不出有什么问题。你只需要定义一个typedef,要么是std::array(如果__cplusplus >= 201103L),要么是boost::array。这里有什么不可取的呢? - Walter

2

C++11被设计成尽可能向后兼容。除非boost使用了C++11中的新保留关键字,否则我不知道为什么它不能与新标准完美编译。


有一些特殊情况下会破坏向后兼容性(我记得某个类的默认移动构造函数存在问题,但是我记不太清楚了)。 - Cubic
@Cubic:我之前不知道这个。谢谢你提醒我。我得留意其他边缘情况。 - eestrada

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