Форум программистов, компьютерный форум, киберфорум
Наши страницы

ф-ция с throw - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ задача на массив http://www.cyberforum.ru/cpp-beginners/thread586942.html
Дан массив из n целых чисел. Для каждого числа, входящего в массив, найти сумму цифр этого числа. Верно ли утверждение, что максимальное число, входящее в этот массив, также имеет и максимальную...
C++ Создание 2D массива из объектов, используя указатели Помогите решить простую задачу. Нужно создать 2х мерный массив из объектов. Каждый объект это точка с координатой x and y. Массив должен создаваться с использованием указателей. Значение координат... http://www.cyberforum.ru/cpp-beginners/thread586936.html
дописать задачу C++
Дан массив из n целых чисел. Удалить из массива все элементы, равные максимальному значению элементов массива. Найти значение и положение первого минимального элемента массива. Упорядочить числа...
C++ Класс String
добрый день. У кого-то есть программа которая создаёт класс String – строку, используя динамическую память. Определить операторы "+" –сложение строк, "=" и "+=" – присваивания, как методы класса....
C++ МЕтод хорд http://www.cyberforum.ru/cpp-beginners/thread586906.html
Всем привет. Надо сделать задачку (она на картинке в рамке красной) там надо применить метод хорд... Если кому не сложно, помогите пжлст....
C++ Ссылки + классы Есть класс A. В нем перегружаю операцию operator&(A& obj); Далее в этой функции происходят действия: A &o1 = (somebool ? this : obj) Однако, это ошибка. А как правильно? Добавлено через... подробнее

Показать сообщение отдельно
Avazart
Эксперт С++
7234 / 5430 / 303
Регистрация: 10.12.2010
Сообщений: 24,128
Записей в блоге: 17
26.05.2012, 04:00  [ТС]
Еще раз спасибо за пример и литературу!
Нарушение спецификации
1. Что произойдет при нарушении спецификации исключений? Почему? Каковы основ¬ные причины существования этой возможности С++?
Идея спецификаций исключений заключается в проверке времени выполнения того, что данная функция может генерировать только определенные типы исключений (либо не генерировать их вовсе). Например, приведенная ниже спецификация исключений гарантирует, что f может генерировать только исключения типа А или B24:

24-Говоря точнее, если окружить эту функцию try/catch блоками для перехвата исключений А и B, то все возможные исключения будут перехвачены — в частности, такая функция может генерировать исключения, являющиеся производными классами от А и В. — Прим. ред.
C++
1
int f()  throw( A,B );
Если будет сгенерировано исключение, которого нет в списке спецификации исключений, будет вызвана функция unexpected().
C++
1
2
3
int f()  throw(A,B)  { // А и в не связаны с C
throw C();               // будет вызвана функция unexpected
}
Вы можете зарегистрировать ваш собственный обработчик для этого случая при помощи стандартной функции set_unexpected. Ваш обработчик не должен получать никаких параметров и не должен возвращать никаких значений.
C++
1
2
void MyUnexpectedHandler()  { /*  ...  */ } 
std::set_unexpected( &MyUnexpectedHandler  );
Остается один вопрос — что может делать ваш обработчик? Единственное, чего он не может делать, — это выйти из функции при помощи оператора return. Поэтому у него есть два варианта действий:
• преобразовать исключение в другое, допустимое спецификацией исключений, путем генерации исключения типа, имеющегося в списке спецификации исключений, вызвавшего вызов обработчика. Свертка стека при этом продолжится с того места, где она остановилась;
• вызвать функцию terminate, которая завершает работу программы. (Функция terminate также может быть заменена другой, но в любом случае она должна завершить выполнение программы.)
Применение
Идея, лежащая в основе спецификаций исключений, очень проста: в программе C++ любая функция, если не указано иное, может генерировать исключения любого типа. Рассмотрим некоторую функцию Func.
2. Какие исключения могут быть сгенерированы каждой из перечисленных ниже функций.
C++
1
int Func();            // может генерировать любые исключения
По умолчанию в C++ функция Funс может генерировать исключения любого типа, как сказано в комментарии к ней. Однако зачастую нам известно, что функция может генерировать только исключения определенных типов. В таком случае может оказаться разумным сообщить об этом компилятору и программисту.Например:
C++
1
2
int Gunc()  throw();        // не генерирует исключений
int HunсО  throw(A,B);   // может генерировать только а или в
В приведенном примере спецификации исключений использованы для того, чтобы дать дополнительную информацию о функциях, а именно — о типах исключений, которые они могут генерировать. Комментарии, приведенные рядом с функциями, переводят спецификации исключений на обычный русский язык.
Первая мысль по этому поводу — чем больше информации, тем лучше, так что указание спецификации исключений функции — это всегда не плохо. Но это не обязательно так, поскольку зачастую в излишней детализации и кроется зло: хотя намерения у спецификаций исключений и благие, вымощенный ими путь может завести нас не совсем туда, куда хотелось бы.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.