![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| fear |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
class exception {
public: exception( ); exception(const char *const&); exception(const char *const&, int); exception(const exception&); exception& operator=(const exception&); virtual ~exception( ); virtual const char *what( ) const; }; Что за тип такой const char *const&? Зачем такие сложности? |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Ссылка на константный указатель на константу насколько можно предположить. вопрос к автору кода(это не из стандартной библиотеки.). Простого указателя на константу должнно было бы хватить. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Это у создателя спросить надо Это вроде константная ссылка на константную строку, но могу ошибаться -------------------- Жизнь - печальная штука. |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
в данном случае константная строка и кроме того константный указатель на 1-й элемент. т.е. нельзя менять строку и указатель на нее. Зачем - это всетаки эксепшен. Может это важно в каких-то реализациях
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
не думаю, может просто идет какая-нибудь оптимизация, из-за этого, чтобы не копировать лишних 4 байта передается ссылка на указатель, но тогда адрес указателя можно было бы изменять, потому этот указатель - указатель-константа -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| fear |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
Спасибо за пояснение, ответ исчерпывающий. Я только начал разбираться в обработке исключений, поэтому было бы интересно узнать кто как её реализует. Особенно былибы интересны примеры. Используются ли при этом классы стандартной библиотеки (какие?) или пишутся свои? Стоит ли наследовать свой класс исключений от std::exception? Кто какие в этом видет плюсы плюсы? Это сообщение отредактировал(а) fear - 18.5.2006, 23:29 |
|||
|
||||
| DeadSoul |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
1. Как отлавливать исключения. Возможные варианты
- по значению
ОЧЕНЬ плохо. Возможна "срезка", т.е. было выброшено MYExcException:public MyException и т.д. 2. По указателю:
Вопрос в коде. 3. По ссылке(the best)
Более подробно смотри у Саттера.
It depends. К сожалению, std::exception не поддерживает юникодные строки Общее требование: внутри одного проекта все классы исключений должны иметь один базовый(например, std::exception) -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
||||||||
|
|||||||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Ну, не стОит так жестко. Во-первых, это не всегда возможно. Например, если используешь и MFC и STL... Кроме того, бывает полезно в каких-то подзадачах ввести простые локальные исключения типа пустых структур: struct _BadOp {}; Главное - их во-время поймать и оттранслировать во что-то удобоваримое... -------------------- ... |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
Согласен. ПОчему нельзя эти "пустые" исключения наследовать от одного базового? -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| fear |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
Сделал небольшую надстройку класса exception, что бы фиксировать номер ошибки.
Хотелось бы услышать замечания по приведённому выше коду. |
||||
|
|||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
fear, зачем тебе номер ошибки? Ты пытаешься работать с исключениями как с кодами ошибок. Это нехорошо
-------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| fear |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
Код ошибки - это для примера, моя программа представляет собой что-то вроде лексического анализатора, и мне нужно фиксировать номер строки, в которой произошла ошибка. Программа простая, в случае ошибки должна завершаться. Организована она следующим образом:
Исключение будет содержать информацио о ошибке и месте её возникновения, с целью информирования пользователя. DeadSoul, так использовать исключения хорошо? Какие ещё есть классы исключений по типу std::exception в STL и BOOST? Добавлено @ 15:11
Да, и почему если явно не указать тип для второго параметра, компилятор выдаёт ошибку, а для первого нет? |
||||||
|
|||||||
| MAKCim |
|
||||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
std::bad_alloc (при неудачном выделении памяти new) std::bad_cast (при приведении ссылок в dynamic_cast) std::bad_typeid std::bad_exception std::out_of_range std::range_error ... и еще, зачем такой тип использовать?
просто const unsigned int не катит?
неявно привести целое к ссылке на указатель нельзя -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||||
|
|||||||||
| DeadSoul |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
Ты показал как трогаешься со светофора и спрашиваешь хороший ли ты водитель. Исключения - вещь безусловно вещь полезная. Сравни:
При этом в первый случай надо добавить код по формированию нормального описания ошибки! Но использование исключение налагает некоторые требования на окружающий код(он должен быть exception safety)
-------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Да можно, конечно. Все это вопрос стиля и привычки. Просто я не люблю включать лишние файлы по пустякам. Если мне не надо передавать какие-то параметры в исключение, а важен только сам факт, причем ловлю я его локально и все равно транслирую в MFC - на кой мне наследоваться от std::exception? -------------------- ... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |