c++ - 哪些 Boost 库利用了 Move Semantics

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

右值引用和 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::intrusiveboost::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/

相关文章:

c++ - 检查第 n 个可变参数模板参数是否属于特定类型

c++ - 重写 operator>> 用于 Strings 类

c++ - 如何在 constexpr 函数中执行运行时断言?

c++ - 在 C++ 中的不同文件中编写类

c++ - 共享内存分配 > 2GB(需要链接到 VB6 使用的 32 位 DLL)

c++ - 如何使用 boost::iostreams 将 bash 脚本转换为 C++

python - 使用 bjam 的 pythonpath 功能

c++ - 在 C++ 中,从模板函数中调用模板函数获取指针的值

c++ - 如何使用 cout 以完全精确的方式打印 double 值?

c++ - Arduino 立体声音量表