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

joh*_*ers 5 c++ sorting move-semantics c++11

isocpp.org指出:

基于移动的std :: sort()和std :: set :: insert()的测量速度比基于复制的版本快15倍[...]如果你的类型有移动操作,你会自动获得性能优势来自标准算法.

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

此外,如果要进行排序,是容器还是容器内的类型,或两者都必须定义移动操作?

Nat*_*ica 8

这是否意味着如果调用sort()没有移动构造函数或移动赋值运算符的用户定义类型,那么是否使用了移动语义?

正确.如果班级不可移动,那么它将回归复制

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

如果你可以肯定,谁不喜欢更多的表现.请注意,根据班级的不同,您可能会自动生成移动操作.

此外,如果要进行排序,是容器还是容器内的类型,或两者都必须定义移动操作?

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