Mediumnoexceptmove
Что такое noexcept move и почему STL проверяет?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
STL-контейнеры дают strong exception guarantee при resize: либо операция завершена, либо состояние не изменилось. При reallocation элементы переносятся в новый буфер. Если move noexcept — используется move; если может бросить — STL fallback на copy (копию можно откатить).
class Good {
std::vector<int> data;
public:
Good(Good&&) noexcept = default; // STL использует move
Good& operator=(Good&&) noexcept = default;
};
class Bad {
Bad(Bad&&) noexcept(false); // STL fallback на copy
};Проверка через std::is_nothrow_move_constructible_v<T>. Правило: всегда noexcept для move ctor/assign (если возможно), иначе штраф производительности. Аналогично для std::sort.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.