哪些Boost库利用Move Semantics

时间:2012-03-09 21:25:55

标签: c++ boost c++11 rvalue-reference move-semantics

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

Boost 1.48引入了一个新的库,以便在旧的C ++ 03编译器上模拟移动语义。这个库通过引入宏来扩展为真正的右值引用,当使用C ++ 11编译器编译代码或使用C ++ 03编译器编译代码时模拟rvalue引用。

boost::container之外还有其他任何升级库已更新以利用移动语义吗?

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

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

1 个答案:

答案 0 :(得分:9)

正如你在问题中所说,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是寻找可靠答案的最佳位置:

  • Boost.Interprocess 从1.45起支持C ++ 11和C ++ 03。在1.48之前,这包含成为boost.move。
  • 的代码
  • Boost.Asio 自1.47起支持;在C ++ 03中没有仿真
  • Boost.Intrusive 在1.48(C ++ 11,C ++ 03)中通过boost.move获得支持
  • Boost.Container 是1.48中的新功能,通过boost.move支持(C ++ 11,C ++ 03)
  • Boost.Icl 在1.49(C ++ 11,C ++ 03)中通过boost.move获得支持
  • Boost.Unordered 在1.49(C ++ 11中使用#define通过boost.move获得支持,以便在C ++中启用模拟03)
  • Boost.Thread 支持C ++ 03仿真w / boost.move自1.50以来,旧版本支持C ++ 11仅支持
  • Boost.Function 在1.52
  • 中添加了仅支持C ++ 11的支持