Я заметил, что оператор присваивания std::string
(действительно std::basic_string
)) noexcept
. Это имеет смысл для меня. Но затем я заметил, что ни один из стандартных контейнеров (например, std::vector
, std::deque
, std::list
, std::map
) не объявляет оператор назначения перемещения noexcept
. Это имеет меньшее значение для меня. A std::vector
, например, обычно реализуется как три указателя, и указатели, безусловно, могут быть назначены с переносом без исключения исключения. Затем я подумал, что, возможно, проблема связана с перемещением контейнера-распределителя, но std::string
тоже имеют распределители, поэтому, если бы это было проблемой, я ожидал, что это повлияет на std::string
.
Итак, почему std::string
переместить оператор присваивания noexcept
, но операторы присваивания пересылки для стандартных контейнеров не являются?