C++ предоставляет синтаксис для проверяемых исключений, например:Почему исключения в C++ не проверяются компилятором?
void G() throw(Exception);
void f() throw();
Однако Visual C++ компилятор не проверяет их; флаг throw просто игнорируется. По моему мнению, это исключает возможность использования исключения. Так что мой вопрос: есть ли способ заставить компилятор проверить, правильно ли пойманы или восстановлены исключения? Например, плагин Visual C++ или другой компилятор C++.
PS. Я хочу, чтобы компилятор проверял, правильно ли пойманы исключения, в противном случае вы попадаете в ситуацию, когда вам приходится класть ловушку на каждый вызов вашей функции, , даже если они явно заявляют, что ничего не будут бросать.
Обновление: Компилятор Visual C++ показывает предупреждение при бросании функции, помеченной throw(). Это здорово, но, к сожалению, предупреждение не появляется, когда вы вызываете подпрограмму, которая может быть брошена. Например:
void f() throw(int) { throw int(13); }
void h() throw() { g(); } //no warning here!
Я никогда не слышал об проверенных исключениях на C++, но теперь я расскажу об исключении спецификации и что Visual C++ не очень-то о них беспокоит, посмотрите здесь: http://msdn.microsoft.com/ en-us/library/wfa0edys.aspx – Skurmedel
Visual C++ не совсем игнорирует это ... добавление throw() в конец функции сообщает Visual C++, что он может предположить, что функция не выбрасывает, например оптимизации, и если функция действительно бросает, то все может случиться. В стандарте говорится, что если функция отмечена throw() выходит из-за исключения, то std :: неожиданный(), который обычно генерирует std :: bad_exception.Это очень отличается от того, что «может случиться». – Doug
Если спецификации исключений были подсказками для компиляторов, а не требованиями для чего-то, они были бы потенциально полезными. Стандартное поведение, на мой взгляд, бесполезно. –