代码之家  ›  专栏  ›  技术社区  ›  johnbakers

sort()是否自动使用移动语义?

  •  5
  • johnbakers  · 技术社区  · 9 年前

    isocpp.org 声明:

    基于移动的std::sort()和std::set::insert()已测量为 如果您的类型有移动,则比基于复制的版本快15倍[…] 操作时,您将自动从 标准算法。

    这是否意味着如果你打电话 sort() 在没有移动构造函数或移动赋值运算符的用户定义类型上,是否没有使用移动语义?换句话说,为了获得C++11性能改进的诸多好处,您应该编辑现有代码来显式添加移动操作?

    此外,如果您正在排序,那么必须定义移动操作的是容器还是容器内的类型,或者两者兼而有之?

    1 回复  |  直到 9 年前
        1
  •  8
  •   Community Mohan Dere    8 年前

    这是否意味着如果你打电话 sort() 在没有移动构造函数或移动赋值运算符的用户定义类型上,是否没有使用移动语义?

    对的如果类不可移动,则它将返回到复制

    换句话说,为了获得C++11性能改进的诸多好处,您应该编辑现有代码来显式添加移动操作?

    如果你能确定,谁不喜欢更多的表演。请注意,根据您可能获得的级别 automatically generated move operations .

    此外,如果您正在排序,那么必须定义移动操作的是容器还是容器内的类型,或者两者兼而有之?

    容器本身不需要是可移动的。 std::sort 要求传递给它的迭代器 应满足ValueSwapable(17.6.3.2)的要求。 并且通过取消引用迭代器返回的类型 应满足MoveConstructible(表20)和MoveAssignable的要求 (表22)。