右值引用和 move 语义是 C++11 的一项主要功能,可以通过减少不必要的拷贝显着加快代码速度。当使用 c++11/0x 编译器(例如 gcc 4.6)时,STL 已更新以使用此新功能
Boost 1.48 引入了一个新库,以便在较旧的 C++03 编译器上模拟 move 语义。该库通过引入宏来工作,当使用 C++11 编译器编译代码时,这些宏会扩展为真正的右值引用,或者当使用 C++03 编译器编译代码时,这些宏会扩展为真正的右值引用。
除了 boost::container
是否已更新任何其他 boost 库以利用 move 语义?
是否有详细说明何时/是否将 move 语义添加到其他 boost 库的路线图?
boost::multi_index_container
提到了在
Boost.MultiIndex Future work ,因为它是在 1.31 版本中引入的。
最佳答案
正如您在问题中所说,boost 1.48 引入了 boost::move
,这是一个使用 C++03 模拟 move 语义的库。这是由 Ion Gaztanaga 开发的,他也(大部分)编写并目前维护 boost::intrusive
和 boost::container
。
intrusive 和 container 都支持 move 语义 - 实际上 boost::intrusive
必须支持 boost::container
的 move 语义,因为 boost::container
基本上是一堆非侵入式容器,通过包装它们的 boost::intrusive
对应物来实现。在我看来,侵入式/容器是编写 boost::move
的动机,因此他们在其余的 boost 方面处于领先地位也就不足为奇了。
但需要注意的是,这里没有 boost 路线图或委员会 - boost 只是共享分发、网站和审查/质量控制过程的库的集合。您必须将每个库视为一个单独的项目,只有当作者/维护者有兴趣做这项工作时(或者当然,当您向他们发送补丁时!)才会更新。
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 中通过 boost.move 获得了支持(C++11,带有
#define
以在 C++03 中启用仿真) - Boost.Thread 自 1.50 起支持 C++03 仿真 w/boost.move,旧版本仅支持 C++11
- Boost.Function 在 1.52 中添加了仅限 C++11 的支持
关于c++ - 哪些 Boost 库利用了 Move Semantics,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9641216/