Необработанная проверка исключений в C ++ - PullRequest
1 голос
/ 06 сентября 2011

Есть ли в C ++ способ получить ошибку или предупреждение во время компиляции, если исключение не обработано? Например, рассмотрим следующий фрагмент кода Java:

public void f()
{
    g();  // <-- Java compiler reports "Unhandled exception" error here.
}

public void g() throws Exception
{
}

Может ли g ++ или MSVC сделать что-то подобное? Или есть какой-нибудь внешний инструмент для разбора кода, который может это сделать? Я полагаю, что для этого можно программно расширить синтаксический анализатор C ++ Eclipse CDT, но ... есть ли более простые решения?

Ответы [ 2 ]

6 голосов
/ 06 сентября 2011

Просто нет. Спецификации исключений в C ++ имеют другое значение по сравнению со спецификациями исключений в Java, и теперь они устарели, поэтому следует по возможности избегать их.

В C ++ проверки, запрошенные спецификацией исключений, применяются только во время выполнения. В C ++, если функция нарушает спецификацию исключений, вызывается «неожиданный» обработчик. Это не ошибка времени компиляции для вызова функции, которая потенциально может вызвать произвольное исключение из функции со спецификацией исключения.

ИСО / МЭК 14882: 2011 15.4 [исключая.spec] / 11:

Реализация не должна отклонять выражение просто потому, что при выполнении оно выдает или может выдать исключение, которое не разрешено в содержащей функции.

0 голосов
/ 06 сентября 2011

Краткий ответ: нет.В C ++ нет проверенных исключений.Вы можете попробовать использовать внешний инструмент, но я никогда не видел, чтобы кто-нибудь делал это.Просто документируйте интерфейсы правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...