2012-03-09 57 views
11

Rvalue引用和Move语义是C++ 11的一项主要功能,它可以通过减少不必要的副本来显着加速代码。当使用C++ 11/0x编译器(例如gcc 4.6)时,STL已更新为使用此新功能哪些Boost库利用移动语义

Boost 1.48引入了一个新库,以便模拟较旧的C++ 03编译器的移动语义。这个库的工作方式是引入宏,当使用C++ 11编译器编译代码时,扩展为真右值引用,或者当使用C++ 03编译器编译代码时,模拟右值引用。

除了boost::container还有其他boost库被更新以利用移动语义吗?

是否有路线图详细说明何时/如果移动语义将被添加到其他boost库?

boost::multi_index_container已经提到在 Boost.MultiIndex Future work上增加了移动语义,因为它是在版本1.31中引入的。

+0

注11,仅支持:名称“STL”已被弃用且不明确。改为使用“C++标准库”。 – Griwes 2012-03-09 22:34:11

回答

8

正如你在问题中所说的,boost 1.48引入了boost::move,这是一个模仿C++ 03移动语义的库。这是由Ion Gaztanaga开发的,他也(主要)写作并且目前保留boost::intrusiveboost::container

无论侵入性和容器支持移动语义 - 事实上boost::intrusive具有支持移动语义为boost::container到,因为boost::container基本上是一串通过包装自己boost::intrusive同行实现非侵入性的容器。它看起来像侵入性/容器是写作boost::move的动机,所以他们在剩下的提振方面有一个良好的开局并不奇怪。

但是这里需要注意的是,没有提升路线图或委员会 - 提升只是共享分配,网站和审查/质量控制流程的图书馆的集合。您必须将每个库视为一个单独的项目,只有在作者/维护人员对作业感兴趣时才会更新(或者当您向他们发送补丁时!)。

The boost 1.48/1.49/1.50/1.51/1.52 release notes是寻找答案固体最好的地方:,C++ 03

  • Boost.Interprocess中自此1.45同时支持C++ 11。在1.48之前,这包含了成为boost.move的代码。
  • Boost.Asio从1.47开始支持;在C++ 03
  • Boost.Intrusive没有仿真通过boost.move在1.48获得支持(C++ 11,C++ 03)
  • Boost.Container在1.48是新通过升压支持.move(C++ 11,C++ 03)
  • Boost.Icl经由boost.move在1.49得到支持(C++ 11,C++ 03)
  • Boost.Unordered获得支持通过1.49中的boost.move(C++ 11,使用#define在C++ 03中启用仿真)
  • 提升。螺纹支持C++ 03仿真瓦特/ boost.move 1.50以来,旧版本有C++ 11-仅支持
  • 来自Boost.Function加入C++在1.52