关于移动语义和容器:
- 我知道STL容器在元素类型定义了移动操作时会利用它,但它如何知道一个元素是否已经定义了移动操作?
- 为什么STL容器不管元素是否定义了移动操作都调用std::move()呢?我问这个问题是因为我知道即使类型没有定义任何移动操作,也可以调用std::move()来移动对象。
move_if_noexcept
而不是move
”是不准确的。大多数情况下,不需要也没有提供强异常保证。特别是vector
使用move_if_noexcept
来进行一些操作,如reserve
和push_back
。如果我们谈论所有std-defined容器,我会说这是例外而不是规则,尤其是在大多数情况下,基本的异常安全由标准要求并由实现提供。 - Howard Hinnant