try/throw/catch

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: try/throw/catch

Re: try/throw/catch

Romeo » 28 май 2008, 17:15

&quot писал(а):А что значит "бросить" исключение? Значит у меня в Linux деление на 0 не есть исключение?(
Деление на ноль в Windows является исключением и может быть отловлено в catch, в том время, как на юниксоидах, деление на ноль не является исключением, а является сигналом. Сигнал можно отловить другими средствами, но catch здесь уже не поможет. Самое правильное для случая "деление на ноль" - это перед делением проверять знаменатель на равенство нулю, как это отметил ранее Хыиуду, и, в случае равенства, отдельно обрабатывать эту ситуация, не полагаясь на особенности операционной системы. В этом случае твой код будет работать одинаково и на Win, и на любой юниксоподобной OS.

Re: try/throw/catch

Хыиуду » 28 май 2008, 11:13

Бросить - фактически создать вручную исключительную ситуацию. Т.е. при выполнении a/b при нулевом b в той же винде появится страшное окошко с красным крестом и надписью типа "Ошибка ХХХ по адресу УУУ". Вместо этого можно написать что-то вроде: если b=0, бросить исключение "Ошибка в программе такой-то: такой-то параметр равен нулю, недопустимое значение". Намного приятнее разбирать.

Кстати, самый замечательный эксепшн я видел в Icewind Dale 2: "Попытка провалилась. Программист говорит, это неизвестный эффект номер 2671".

Re: try/throw/catch

Monopo » 27 май 2008, 21:50

А что значит "бросить" исключение? Значит у меня в Linux деление на 0 не есть исключение?(

Re: try/throw/catch

Albor » 22 май 2008, 12:59

Принято, Romeo.

Re: try/throw/catch

Romeo » 22 май 2008, 11:12

&quot писал(а):вкратце: try{// подопытные операции, в результате выполнения которых может произойти аварийная ситуация, например - деление на 0}, catch{// блок, определяющий действия программы, если в блоке try возникло исключение}, throw генерирует определённое исключение. А подробнее - в книге.
Деление на ноль является исключением лишь в Windows, так что прошу не обобщать. В Unixоидах, к примеру, - это сигнал. Сигнал не может быть отловлен catch'ем. Правильно говорить, что в try располагается код, который может бросить исключение. Аварийная ситуация - термин неуместный.

Re: try/throw/catch

Albor » 22 май 2008, 11:01

вкратце: try{// подопытные операции, в результате выполнения которых может произойти аварийная ситуация, например - деление на 0}, catch{// блок, определяющий действия программы, если в блоке try возникло исключение}, throw генерирует определённое исключение. А подробнее - в книге.

Re: try/throw/catch

Romeo » 22 май 2008, 10:53

Это похоже на вопрос: "Расскажите, плз, в двух словах как программировать на C++".

Обсуждение концепции исключений и работы с ними займёт слишком много места на форуме и времени у пишущего. Предлагаю тебе изучить эту тему самостоятельно по мануалам (в конце-концов чем отличается чтение форума и мануала - разницы не вижу). Затем вернуться в эту тему, если захочется обсудить какое-то тонкости не освещённые или плохо освещённые в твоём источнике.

try/throw/catch

Monopo » 21 май 2008, 19:39

Объясните, пожалуйста, как работают эти волшебные слова: try/throw/catch? Желательно на примере.

Вернуться к началу