187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
|
||||||||||||||||
1 | ||||||||||||||||
исключения c++19.06.2011, 17:47. Показов 2584. Ответов 11
Метки нет (Все метки)
Здраствуйте! Я тут приспособил код старого проекта чтобы побаловаться с исключениями. Перечитывал я тут недавно главу 14.6 из Страуструпа Язык прграммирования с++. Глава про спецификацию исключений. Он пишет, что если например
Cone max_v(const vector<Cone> &cones) throw(int); может сгенерировать интовые исключения и если функции нарушит свои обязательства, то вызовется unexpected и так далее. Ну по крайней мере я так понял Вот собственно код
Добавлено через 6 минут хотя нет, при throw() в конце самом вылетает с ошибкой Необработанное исключение в "0x6290797f (msvcp90d.dll)" в "project4Sale.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc". но разве так происходит этот самый вызов unexpected? Кстати в объявлении и в определении можно разные спецификации исключений писать, странно Добавлено через 7 минут вот ещё появился вопрос
0
|
19.06.2011, 17:47 | |
Ответы с готовыми решениями:
11
исключения Исключения Исключения в С++ исключения |
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
19.06.2011, 18:03 | 2 |
В большинстве "умных" книжек сказано, что на практике использование любой спецификации, кроме пустого throw не имеет смысла. Т.е. реализация и поведение будет сильно зависеть от версии компилятора и не надо себе пудрить голову. Или пустой throw или ничего.
1
|
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
|
|
19.06.2011, 18:11 [ТС] | 3 |
имеет ли это смысл это другой вопрос, главное что в книги написано одно, а на самом деле происходит совсем другое. То есть я правильно понимаю, что здесь имеет место несоответсвие? Я же всё делал как по книге, а результат не соответсвует описанному в книге. Я впринципе не удивлён, помоему у страуса ещё и про раздельную компиляцию шаблонов было написано, которую ни один из мне известных компиляторов не поддерживает, но это всё... печально
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
19.06.2011, 18:17 | 4 |
То ли у Саттера, то ли у Александреску читал, не помню.. В общем, когда указывается throw с параметрами, то код оборачивается трайем, который перехватывает заданные виды исключений. Если выброшенное исключение совпадает со списком, то оно пересылается дальше, если нет - генерируется unexpected или ещё чего, не помню. Суть в том, что это пустая трата времени. Т.к. знать все возможные исключения проблематично. Поэтому некоторые компиляторы вообще игнорируют спецификацию, отличную от пустого throw.
При этом сообщать об отсуствии исключений смысл есть, т.к. позволяет компилятору лучше оптимизировать код. А вот что будет, есть функция со спецификатором throw выбросит исключение, я не помню.)
1
|
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
|
|
19.06.2011, 18:23 [ТС] | 5 |
про оборачивае траем и у страуса написано
видимо мелкомягкий компилятор один из них( Добавлено через 38 секунд а страуструп врушка xD
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
19.06.2011, 18:24 | 6 |
0
|
alex_x_x
|
19.06.2011, 18:26
#7
|
0
|
19.06.2011, 22:44 | 8 | |||||
По мне так пишу на С++ без исключений это раньше когда новичок был с исключениями, но в JAVA2 без исключений не обойтись там я конечно с исключениями пишу код, там даже обязательство исключение вызывать без этого компилятор-байт кода ругается. Вот мой пример реализации исключений, ведь исключения напоминают обычные goto прыжки.
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
19.06.2011, 23:20 | 9 |
xAtom, почему не унаследоваться от http://cplusplus.com/reference... exception/
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
19.06.2011, 23:56 | 11 |
Maxwe11, если функция выбрасывает исключение, не специфицированное в её throws-списке - будет. Либо функция обрабатывает исключение в своём теле, либо перебрасывает дальше, сообщая при этом, что она может выбросить такое-то исключение. Третьего не дано.
1
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
20.06.2011, 05:57 | 12 |
Лучше бы и оставались новичком и писали с исключениями.
Без исключений, программа превращается в спагетти из проверок кода возврата. Для избавления от такого кода (кроме прочего) и были придуманы исключения. Не игнорируй их.)
0
|
20.06.2011, 05:57 | |
20.06.2011, 05:57 | |
Помогаю со студенческими работами здесь
12
Исключения Исключения Исключения Исключения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |