Функции, не генерирующие исключений. Функции, прозрачные для исключений.

Можно ограничить диапазон типов исключений, которые может генерировать функция за пределами своего тела. Можно также оградить функцию от генерирования каких бы то ни было исключений вообще. Для формирования этих ограничений нужно внести в определение функции throw-выражение. Общий формат определения функции с использованием throw-выражения: тип имя_функции (списокаргументов) throw (списокиментипов) {/ ... /} Элемент *списокимен_типов должен включать те имена типов данных, которые разрешается генерировать функции (элементы списка разделяются запятыми). Генерирование исключения любого другого типа приведет к аварийному окончанию программы. Если нужно, чтобы функция вообще не могла генерировать исключения, нужно использовать пустой список. При попытке сгенерировать исключение, которое не поддерживается функцией, вызывается стандартная библиотечная функция unexpected()*. По умолчанию она вызывает функцию abort(), которая обеспечивает аварийное завершение программы. Но при необходимости задать собственный обработчик процесса завершения. Важно понимать, что любой try-блок, расположенный в теле самой функции, может генерировать исключения любого типа, если они перехватываются в теле той же функции. Ограничение применяется только для ситуаций, когда «выброс» исключения происходит за пределы функции.

Особенности спецификаций исключений в Visual C++

Visual C++ не соответствует стандарту ISO C++ при реализации спецификаций исключений. В следующей таблице представлены сводные сведения о реализации спецификаций исключений в Visual C++.

throw()

Функция не вызывает исключений, но если исключение выдается ф-ей с этим атрибутом, компилятор VC++ не вызовет ф-ю unexpected, т.к. в этом случае компилятор полагает, что она не создает исключений C++, и формирует код соответствующим образом. Из-за возможной оптимизации кода компилятором создание исключения такой ф-ии может привести к неправильному выполнению программы.

throw(...)

Функция может создавать исключения

throw(type)

Функция может создавать исключения типа type. Однако .NET для VC++ интерпретирует это как throw(...).

results matching ""

    No results matching ""