Используйте `noexcept`, когда выход из функции из-за `throw` невозможен или неприемлем
Причина
Делать обработку ошибок систематической, надежной и эффективной.
Пример
double compute(double d) noexcept
{
return log(sqrt(d <= 0 ? 1 : d));
}
Здесь мы знаем, что compute не будет выбрасывать исключение, потому что она состоит из операций, которые не выбрасывают исключения. Объявляя compute как noexcept, мы даем компилятору и читателям человека информацию, которая может облегчить им понимание и манипулирование compute.
Примечание
Многие стандартные библиотечные функции являются noexcept, включая все стандартные библиотечные функции "унаследованные" из стандартной библиотеки C.
Пример
vector<double> munge(const vector<double>& v) noexcept
{
vector<double> v2(v.size());
// ... сделать что-то ...
}
noexcept здесь указывает, что я не готов или не могу справиться с ситуацией, когда я не могу построить локальный vector. То есть я считаю исчерпание памяти серьезной ошибкой проектирования (на уровне отказа оборудования), поэтому я готов потерпеть сбой программы, если это произойдет.
Примечание
Не используйте традиционные спецификации исключений.