Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.72
Avazart
Эксперт С++
7121 / 5298 / 273
Регистрация: 10.12.2010
Сообщений: 23,439
Записей в блоге: 17
#1

ф-ция с throw - C++

25.05.2012, 23:40. Просмотров 3343. Ответов 29
Метки нет (Все метки)

Встретил такую мне незнакомую запись:

C++
1
2
3
4
тип имя_функции( параметры ) throw(что-то)
{
тело_ф-ции
}
Что дает такая запись с throw ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2012, 23:40     ф-ция с throw
Посмотрите здесь:

ф-ция - C++
Написать программу, проверяющую делимость целого числа на числа от 2 до 10. Проверка делимости на конкретное число должна быть реализована...

Throw() - C++
#include "stdafx.h" #include <iostream> using namespace std; void handler(double test) throw() { if (sizeof(double) ==...

Throw exceptions - C++
В массиве нужно отловить все исключения. Скока их ? Zerodevide,out_of_range_,wrong_type,bad_alloc. Привидите еще примеры.Желательно с...

try-throw-catch - C++
#include <iostream> #include <math.h> using namespace std; class Drob { public: int obchuslennia (int a, int...

Noexcept и throw() - C++
здравствуйте, подскажите, в каких случаях нужно использовать noexcept за исключением деструкторов и swap?

Try, catch, throw - C++
Подскажите, как с помощью try, catch, throw, обработать исключение на вводимый тип данных? Например, допускается только тип int, что...

try, catch, throw - C++
пишу класс namespace mystd { const uint32_t def_size = 1 << 20; //default memory container template<typename T> ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
Эксперт С++
7121 / 5298 / 273
Регистрация: 10.12.2010
Сообщений: 23,439
Записей в блоге: 17
26.05.2012, 15:55  [ТС]     ф-ция с throw #16
Ну да я прочитал про спецификацию, и там говорят почему не рекомендуется использовать её.
В компиляторах, соответствующих стандарту, throw замедляет рантайм.
Имеется ввиду обычный throw/catch -блок?
Об этом можно по подробнее?
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
26.05.2012, 16:01     ф-ция с throw #17
Цитата Сообщение от Avazart Посмотреть сообщение
Имеется ввиду обычный throw/catch -блок?
Об этом можно по подробнее?
Ну, допустим, мы имеем такую функцию
C++
1
void foo() throw(...)
Затем в этой функции появляется некое исключение.
Тип этого исключения по очереди сравнивается с каждым элементом списка в throw(...), если этого типа там нету, то вызывается unexpected.

Как-то так, но точно не помню, у Саттера это более подробно описано.
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
26.05.2012, 16:03     ф-ция с throw #18
diagon, ну так ты имел ввиду не пользоваться спецификациями исключений, или исключениями вообще?
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
26.05.2012, 16:08     ф-ция с throw #19
Цитата Сообщение от grizlik78 Посмотреть сообщение
diagon, ну так ты имел ввиду не пользоваться спецификациями исключений, или исключениями вообще?
В данном случае спецификациями.
А вообще я и обычные исключения избегаю, ибо раньше я думал, что понимаю их, но потом понял, насколько геморройно писать безопасный с точки зрения исключений код.
Не зря же в google coding style, к примеру, от исключений отказались вообще.
Bers
Заблокирован
26.05.2012, 16:11     ф-ция с throw #20
исключения в принципе тормозят рантайм, ибо юзают рантайм идентификацию типов (которую сволочи не захотели предоставить программистам, якобы дабы не портя статик-идеологии языка).

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

Добавлено через 54 секунды
Цитата Сообщение от diagon Посмотреть сообщение
Не зря же в google coding style, к примеру, от исключений отказались вообще.

Не отказались. Лишь признали правомерность исключений исключительно в исключительных ситуациях, но не в качестве штатной работы.
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
26.05.2012, 16:26     ф-ция с throw #21
Цитата Сообщение от Bers Посмотреть сообщение
Не отказались. Лишь признали правомерность исключений исключительно в исключительных ситуациях, но не в качестве штатной работы.
Возможно, я слишком плохо знаю английский, но что-то не вижу там такого пункта.
Вижу лишь "We do not use C++ exceptions" и исключение из правил для виндоус-кода.
Avazart
Эксперт С++
7121 / 5298 / 273
Регистрация: 10.12.2010
Сообщений: 23,439
Записей в блоге: 17
26.05.2012, 16:28  [ТС]     ф-ция с throw #22
Прочитав раздел по исключения в этой книге я только запутался... так и не понял стратегию исключений и в чем подводные камни...
Естественно мне понятно что может быть утечка памяти из-за неправильно организованых исключений(вроде как отсюда и появились умные указатели...)
Но во всем другом чет не догнал... сильно уж абстрактно и без примеров

насколько геморройно писать безопасный с точки зрения исключений код.
А как без них?
Bers
Заблокирован
26.05.2012, 16:30     ф-ция с throw #23
Цитата Сообщение от diagon Посмотреть сообщение
Возможно, я слишком плохо знаю английский, но что-то не вижу там такого пункта.
есть некий инструмент, который может бросить исключение. Это вынуждает вызывающую сторону пасти исключения.

Нравится это, или нет.

Гугл пользуются инструментами и фрейморками, а так же обеспечивают средства работы с этими другими фреймворками. Поставляют библиотеки и тд.

Другими словами, они живут не в сферическом ваккуме, и им приходится учитывать эти ситуации.

Они лишь гарантирует, что ихние поставщики услуг исключений не кидают.
Avazart
Эксперт С++
7121 / 5298 / 273
Регистрация: 10.12.2010
Сообщений: 23,439
Записей в блоге: 17
26.05.2012, 16:30  [ТС]     ф-ция с throw #24
diagon, ну так ты имел ввиду не пользоваться спецификациями исключений, или исключениями вообще?
Именно об этом я спрашивал...
Bers
Заблокирован
26.05.2012, 16:33     ф-ция с throw #25
Цитата Сообщение от Avazart Посмотреть сообщение
А как без них?
Игру запускаю в режиме "автоматическая без графики", и иду пить чай.
Через 15 минут прихожу (там уже порядка 15000-20000 игр), и смотрю где вылет: трассу стека функций. И сразу вижу, какова была ситуация перед тем, как сработала система безопасности.

Искусственно повторяю ситуацию, исправляю, потом запускаю ещё партию из 15000-20000 игр, и иду пить чай.
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
26.05.2012, 16:41     ф-ция с throw #26
Цитата Сообщение от Avazart Посмотреть сообщение
Прочитав раздел по исключения в этой книге я только запутался... так и не понял стратегию исключений и в чем подводные камни...
Естественно мне понятно что может быть утечка памяти из-за неправильно организованых исключений(вроде как отсюда и появились умные указатели...)
Но во всем другом чет не догнал... сильно уж абстрактно и без примеров
Мне также тяжело дался этот раздел(тяжелее него был лишь раздел про экспорт шаблонов). Причем это было сложновато просто понять. А уж как проектируют архитектуру сложных приложений с учетом исключений, я вообще не могу представить.

Цитата Сообщение от Avazart Посмотреть сообщение
А как без них?
Старые добрые коды ошибок в С-стиле.
Вроде
C
1
2
3
4
if (p = malloc(...) )
   //все ок
else
   //ошибка
В плюсах вместо этого генерируется исключение, поэтому new попросту опасно использовать с точки зрения исключений.
Еще красивее сделана функция perror.
Это все были С-шные примеры, но в плюсах эта схема также используется.
boost::error_code очень ярко это иллюстрирует
Еще можно ассерты использовать.
В общем, способов довольно много.
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
26.05.2012, 16:48     ф-ция с throw #27
Цитата Сообщение от Avazart Посмотреть сообщение
Прочитав раздел по исключения в этой книге я только запутался...
В какой? Саттер? А предыдущую его книгу тоже читал?
Bers
Заблокирован
26.05.2012, 16:51     ф-ция с throw #28
Цитата Сообщение от diagon Посмотреть сообщение
В плюсах вместо этого генерируется исключение, поэтому new попросту опасно использовать с точки зрения исключений.
можно юзать и без искл.

Цитата Сообщение от diagon Посмотреть сообщение
Еще можно ассерты использовать.
Только не сырые. Макрос над макросом. Ибо, каждая система сборки исповедует собственную религию, и полагаться на стандартизированные флаги дебаг/релиз нельзя.
Avazart
Эксперт С++
7121 / 5298 / 273
Регистрация: 10.12.2010
Сообщений: 23,439
Записей в блоге: 17
26.05.2012, 17:27  [ТС]     ф-ция с throw #29
В какой? Саттер? А предыдущую его книгу тоже читал?
Предыдущую это какую?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2012, 18:07     ф-ция с throw
Еще ссылки по теме:

Try..catch..Throw - C++
Объясните пожалуйста разницу. Желательно с примерами, например деление на ноль, ну или чтобы было сразу несколько исключений. Расскажите...

Операторная ф-ция - C++
Добрый вечер, вот есть код: #include <iostream> #include <stdio.h> #include <stdlib.h> #include <vector> #include...

throw, try, catch - C++
Пожалуйста, помогите разобраться в том, что это такое, и как его правильно использовать. Где можно об этом почитать? P.S. только начал...

Рандомная ф-ция rand() - C++
Всем привет,объясните пожалуйста как работает рандомная ф-ция,например: rand()%10 == 5 rand()%15+2 rand()%5 == 1 rand()%5 ...

Функция со спецификацией throw - C++
Что такое функция со спецификацией throw(), и функция с конкретной спецификацией с подходящим стандартным исключением. Покажите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
26.05.2012, 18:07     ф-ция с throw #30
Решение сложных задач на C++.
Кстати, слово "сложных" в названии обеих книг не случайно. Они действительно, в большинстве своём, сложные. Хотя и не всегда задачи.
Yandex
Объявления
26.05.2012, 18:07     ф-ция с throw
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru