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

fee*_*ree 11 c++ boost c++11

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

Vic*_*avu 11

std::move(boost::move当启用c ++ 0x支持时)只是一个强制转换T&T&&.它实际上并没有移动任何东西.这意味着T&&编译器必须支持特定类型的指针.从版本4.3开始,GCC支持r值引用,因此boost版本应该没问题.

然而,有没有你不能使用的原因std::move,从#include <utility>

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

您只需确保指定-std=c++0x为编译器选项,以便启用gcc 4.4具有的有限c ++ 11支持.

  • 在C++ 03`boin :: move`中,它不仅仅是一个演员**:这就是它在那里工作的原因."Boost.Move基于宏,它们扩展为C++ 0x编译器中的真正右值引用,以及C++ 03编译器中的模拟右值引用类和转换运算符." 请参阅[Boost docs](http://www.boost.org/doc/libs/1_59_0_b1/doc/html/move/how_the_library_works.html) (4认同)

Ser*_*sen 8

是的,它可以

什么是Boost.Move?

Rvalue引用是一个主要的C++ 0x特性,支持C++值的移动语义.但是,我们不需要C++ 0x编译器来利用移动语义.Boost.Move在C++ 03编译器中模拟C++ 0x移动语义,并允许编写在C++ 03和C++ 0x编译器中最佳工作的可移植代码.

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