const - это отдельная проблема для throw ().
Это указывает на то, что это метод const. Таким образом, вызов этого метода не изменит состояние объекта.
throw () означает, что метод не будет генерировать никаких исключений.
Для USER этого метода метод будет возвращаться только обычным способом, и вам не нужно беспокоиться об исключениях, генерирующих вызовы.
В IMPLEMENTER этого метода есть о чем беспокоиться.
В отличие от Java, это не ограничение времени компиляции, а ограничение времени выполнения. Если разработчик запишет функцию так, что он случайно выбрасывает исключение из метода, тогда среда выполнения остановит работу приложения (без разматывания стека, без деструкторов и т. Д.).
Но соглашение заключается в том, что разработчик примет дополнительные меры предосторожности, чтобы перехватить все внутренние исключения.
PS
Вы можете захотеть получить от std :: runtime_error
(от Comment@onebyone.livejournal.com): Не совсем.
Спецификатор no throw активно используется. Это признак исключительной безопасности, демонстрирующий, что метод обеспечивает безбросовую гарантию
С другой стороны, другие спецификаторы исключений не используются, поскольку они слишком опасны. Если вы ошиблись, это приведет к закрытию приложения через (std :: непредвиденный). Действие по умолчанию - завершение приложения без разматывания стека и без очистки с помощью деструкторов объектов. В MHOP это вряд ли когда-либо желательно.