что означает эта декларация? исключение () throw () - PullRequest
8 голосов
/ 13 января 2010

std :: исключительный класс определяется следующим образом

exception() throw() { }
virtual ~exception() throw();
virtual const char* what() const throw();

что означает синтаксис throw () в объявлении? Может ли throw () принимать параметры? Что не означает никаких параметров?

Ответы [ 5 ]

18 голосов
/ 13 января 2010

Это «спецификация исключений». throw () означает «эта функция не будет генерировать никаких исключений». Вы также можете указать исключения, поэтому throw (foo) скажет, что эта функция может генерировать исключения типа foo.

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

12 голосов
/ 13 января 2010

Без каких-либо параметров это означает, что упомянутые функции не генерируют любые исключения.

Если вы указываете что-либо в качестве параметра, вы говорите, что функция будет генерировать только исключения этого типа. Обратите внимание, однако, что это , а не принуждение к компилятору. Если возникнет исключение какого-либо другого типа, программа вызовет std :: terminate ().

1 голос
/ 13 января 2010

Это называется спецификацией броска. Он определяет, какие исключения (если они есть) могут быть выброшены из функции.

Теоретически звучат великолепно, но есть проблемы с их использованием.

Хорошую дискуссию по этому вопросу можно найти на этом ТАК вопрос .

1 голос
/ 13 января 2010

Это спецификация исключения . Отсутствие аргументов означает, что функция не может генерировать никаких исключений.

0 голосов
/ 13 января 2010

Может ли throw () принимать параметры?

Да, его можно использовать для объявления, какие параметры разрешено методу.

Также деструктор помечен как throw (), деструкторы никогда не должны бросать исключения, поскольку они могут уже выполняться в контексте брошенного исключения.

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