2012-03-09 80 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