В С++ вы можете указать, что функция может или не может генерировать исключение, используя спецификатор исключения. Например:
void foo() throw(); // guaranteed not to throw an exception
void bar() throw(int); // may throw an exception of type int
void baz() throw(...); // may throw an exception of some unspecified type
Я сомневаюсь в том, что я действительно использую их из-за следующего:
- Компилятор действительно не применяет спецификаторы исключений каким-либо строгим образом, поэтому преимущества невелики. В идеале вы хотите получить ошибку компиляции.
- Если функция нарушает спецификатор исключения, я считаю, что стандартное поведение - это прекращение работы программы.
- В VS.Net он обрабатывает throw (X) как throw (...), поэтому соблюдение стандарта не является сильным.
Как вы думаете, следует использовать спецификаторы исключений? Пожалуйста, ответьте "да" или "нет" и укажите некоторые причины, чтобы оправдать ваш ответ.