【问题标题】:boost::move and stl algorithmsboost::move 和 stl 算法
【发布时间】:2014-05-17 06:07:53
【问题描述】:

右值引用是 c++11 中最好的特性之一,但是我们的旧编译器不支持这个美丽的生物。经过一番研究,在 boost::move 的帮助下创建一个可移动的“unique_ptr”并不难,更好的消息是 boost::container 也可以与 boost::move 一起使用。

我的问题是,是否可以让 std::swap_range 或 std::sort 等算法受益于 boost::move?还是我必须为自己写一个?

【问题讨论】:

    标签: c++ algorithm c++11 boost stl


    【解决方案1】:

    在 C++11 之前的 std::sort 内部使用 swap,因此只要您为您的类适当地定义 swap(不要忘记 ADL),它应该使用它而不是复制每个对象。
    移动语义在这里不会做任何重要的事情。

    【讨论】:

    • 是否可以使用swap
    • @juanchopanza:我现在没时间学学究气。一个合理的实现在 C++11 之前的版本中使用 swap,就像在 C++11 之后的版本中一个合理的实现将使用交换或移动语义一样。我不确定允许不合理的实现做什么(可复制性似乎不是要求,但似乎都不是可交换性)但我真的不在乎;因为无论如何它都是一种优化,就我(可能还有 OP)而言,这就足够了。
    • 这不是迂腐。你声称std::sort 使用交换,所以这是一个真正的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    相关资源
    最近更新 更多