Является ли спецификатор noexcept
бесполезным, если ваша реализация имеет модель исключений с нулевой стоимостью (если ничего не выбрасывается)? Каков пример, когда отсутствие noexcept
имеет последствия?
Является ли noexcept бесполезным, если отказ от броска не требует затрат?
Ответы (1)
Является ли спецификатор
noexcept
бесполезным, если ваша реализация имеет модель исключений с нулевой стоимостью (если ничего не выбрасывается)?
Нет, noexcept
было бы полезно, даже если бы исключения вообще не влияли на производительность.
Одним из примеров является то, что noexcept
может сигнализировать о том, какой алгоритм можно использовать. Например, алгоритмы, использующие std::move_if_noexcept
или многие из стандартных type_traits может вести себя по-разному в зависимости от наличия noexcept
.
Это может оказать существенное влияние на общие функции, такие как std::vector
, которые будут намного медленнее, если конструктор перемещения ваших элементов не noexcept
. std::vector
будет копировать все элементы при перераспределении вместо их перемещения, если конструктор перемещения не noexcept
, чтобы сохранить строгую гарантию исключения.