Вы на самом деле задаете этот вопрос неправильно. Решение об использовании noexcept
обычно должно приниматься сверху вниз (например, имеет ли это значение для вызывающей стороны вашей функции), а не снизу вверх (т.е. на основе того, что делает ваша функция).
Есть разница между указанием, что что-то «не должно бросать» и «не нужно бросать». noexcept
подходит для использования в случаях «никогда не должен бросать», а не «не нужно бросать». Но решение о том, что является подходящим, зависит от потребностей вызывающих функцию, а не от того, как функция реализована.
Опуская noexcept
, допускается возможность предоставления бросающей версии функции, например, в целях отладки. Функцию из категории «не нужно выбрасывать» можно безопасно заменить версией с выдачей во время отладки, а затем использовать версию без выбрасывания в «выпускной» сборке. Такие проверки нежелательны в «выпускной» сборке, потому что они часто отрицательно влияют на показатели производительности программы, а также могут вызывать нежелательные побочные эффекты в некоторых случаях (например, если проверки делают что-то вроде проверки стека вызовов или отслеживания общего использования памяти в сборке). программа).
По этой причине operator[]
вместо std::vector
не является nothrow
— он не указан как генерирующий, но замена его генерирующей версией может быть полезна для целей отладки. Если бы он был указан как nothrow
, это уменьшило бы возможности разработчиков по отладке своего кода, использующего стандартную библиотеку, перед выпуском.
person
Peter
schedule
28.02.2016