【问题标题】:the counterpart of std::move in boost librarystd::move 在 boost 库中的对应物
【发布时间】:2016-08-04 07:57:45
【问题描述】:

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

【问题讨论】:

  • g++ 4.4 已经很老了。考虑迁移到较新的版本

标签: c++ c++11 boost


【解决方案1】:

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

但是,您是否有不能使用 std::move#include <utility> 的原因?

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

您只需确保将 -std=c++0x 指定为编译器选项,即可启用 gcc 4.4 对 c++11 的有限支持。

【讨论】:

  • 在 C++03 boost::move 中,它不仅仅是演员表:这就是它在那里工作的原因。 “Boost.Move 基于在 C++0x 编译器中扩展为真正的右值引用的宏,并在 C++03 编译器中模拟了右值引用类和转换运算符。”见Boost docs
【解决方案2】:

可以

什么是 Boost.Move?

右值引用是 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

【讨论】:

    猜你喜欢
    • 2013-07-16
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多