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