Да, но что вы ожидаете случиться, если что-то, не производное от std :: exception, выброшено?
Хотите, чтобы приложение прекратило работу?
Нет разматывания стека, не вызывается деструктор, чтобы привести в порядок код, только приложение закрывается.
Разница между спецификациями исключений Java и C ++ заключается в том, что Java проверяет спецификации во время компиляции. С ++, с другой стороны, выполняет всю проверку во время выполнения. Так что к тому времени, когда ваши спецификации были нарушены, уже слишком поздно.
Даже в коде Java есть движение, чтобы прекратить использовать их. То, что имеет место, происходит в начале проекта, спецификации исключений четко определены. Но по мере роста и усложнения кода спецификации разбавляются до все более общей формы. Это связано с тем, что по мере роста кода может возникать больше исключений, и, если они не могут быть обработаны немедленно, вам необходимо изменить спецификации исключений всей цепочки вызовов обратно к точке, где они могут быть обработаны. (Обратите внимание, я не эксперт по Java, но я играю в зрелой Java-базе кода).
Единственная спецификация исключения (я думаю), которая стоит многого, - это спецификация без бросков. Это действительно действующее приложение (но вы должны использовать его с блоком try / catch (...)).
Также читайте Статья Херба Саттерса :
И этот поток на SO: Должен ли я использовать спецификатор исключений в C ++?