C ++ 11移动语义和STL容器

时间:2014-02-06 02:32:02

标签: c++ c++11 stl

关于移动语义和容器:

  1. 我知道当元素类型中定义了移动操作时,STL容器会利用移动。但是它如何知道元素是否定义了移动操作?

  2. 为什么STL容器无论如何都不会在元素上调用std :: move(),无论元素是否定义了移动操作?我问这个是因为我知道你可以在对象上调用std :: move(),即使它的类型没有定义任何移动操作。

  3. 谢谢。

1 个答案:

答案 0 :(得分:8)

长话短说,这正是他们所做的,如果能够移动或只是复制,请致电std::move而不关心。

值得注意的是,某些提供强大异常保证的功能(例如std::vector::resize)会调用鲜为人知的std::move_if_nothrow而不是std::move