【问题标题】:Is sort() automatically using move semantics?sort() 是否自动使用移动语义?
【发布时间】:2016-04-19 18:35:27
【问题描述】:

isocpp.org 声明:

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

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

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

【问题讨论】:

标签: c++ sorting c++11 move-semantics


【解决方案1】:

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

正确。如果类不可移动,那么它将退回到复制

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

如果可以确定,谁不喜欢更多的性能。请注意,根据班级的不同,您可能会收到automatically generated move operations

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

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

【讨论】:

    猜你喜欢
    • 2014-01-31
    • 1970-01-01
    • 2020-11-07
    • 2012-04-08
    • 1970-01-01
    • 2013-04-07
    • 2021-08-29
    相关资源
    最近更新 更多