在boost库中std :: move的对应物

时间:2016-08-04 07:57:46

标签: c++ c++11 boost

我正在尝试在我的代码中使用std::move,但我使用的编译器(g ++ 4.4)不支持它。可以boost::move完全替换std::move吗?谢谢。

2 个答案:

答案 0 :(得分:11)

if ($category->getIsActive()) { $cat = Mage::getModel('catalog/category')->load($category->getId()); $products = Mage::getResourceModel('catalog/product_collection')->addCategoryFilter($cat); Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products); Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products); Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($products); if(count($products)==0) return; } (以及std::move启用c ++ 0x支持时)只是从boost::moveT&的强制转换。它实际上并没有移动任何东西。这意味着编译器必须支持特定类型的指针T&&。从版本4.3开始,GCC支持r值引用,因此boost版本应该没问题。

但是,您是否有理由不能使用T&&中的std::move

http://en.cppreference.com/w/cpp/utility/move

您只需确保将#include <utility>指定为编译器选项,以便启用gcc 4.4支持的有限c ++ 11支持。

答案 1 :(得分:8)

是的,它可以

  

什么是Boost.Move?

     

Rvalue引用是一个主要的C ++ 0x功能,支持移动语义   对于C ++值。但是,我们不需要C ++ 0x编译器   移动语义学的优势。 Boost.Move模拟C ++ 0x移动语义   在C ++ 03编译器中,允许编写可行的可移植代码   最佳地在C ++ 03和C ++ 0x编译器中。

来源: http://www.boost.org/doc/libs/1_59_0_b1/doc/html/move.html