关于移动语义和容器:
我知道当元素类型中定义了移动操作时,STL容器会利用移动.但是它如何知道元素是否定义了移动操作?
为什么STL容器无论如何都不会在元素上调用std :: move(),无论元素是否定义了移动操作?我问这个是因为我知道你可以在对象上调用std :: move(),即使它的类型没有定义任何移动操作.
谢谢.
长话短说,这正是他们所做的,std::move如果它能够移动或只是复制就不需要关心.
值得注意的是,一些提供强大异常保证的功能,例如std::vector::resize,将调用鲜为人知的std::move_if_nothrow而不是std::move.