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

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

Войти
Регистрация
Восстановить пароль
 
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
#1

если ли стандартное исключение чтоб перехватывало - C++

01.09.2012, 02:47. Просмотров 613. Ответов 10
Метки нет (Все метки)

что б перехватывало
а ля

C++
1
2
3
4
5
6
7
8
9
unsigned int a = - 2 ; 
 
try 
{
cout << a ; 
}
 
catch (??? ) 
{}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2012, 02:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос если ли стандартное исключение чтоб перехватывало (C++):

Не могу определить так, чтоб если массив, присвоить нулями - C++
Передаю массив по указателю (int* M) и если размер переданного массива меньше чем m_current, то присвоить остальных нулями. ...

Сгенерировать исключение в случае, если файл не удалось открыть - C++
&quot;void SaveToFile (char*fn)Создает новый файл с названием fn и записывает в него массив в двоичном виде; генерирует исключение в случае,...

Конструктор копирования кидает исключение, если копируют объект, созданные дефолтным конструктором - C++
Привет! Вопрос из области философии - наткнулся на такое поведение при работе с IBPP (С++ клиент для работы с Firebird. Firebird - это...

как сделать так, чтоб если вводишь не цифры, а буквы он не выкидывал из программы, а выполнял команду - C++
Всем привет. Помогите. я начал программировать в С++ и спрогал калькулятор. вот код: #include &lt;iostream&gt; #include &lt;cmath&gt; using...

без знаковый double. Если ли чтоб можно было в шаблон пихать или самому сделать придется ? - C++
сабжж

Нужно ввести текст, если он больше 80 символов нужно чтоб он переходил на новую строку - C++
Написал клиент сервер, с командами add-запись в файл, remove-удаление из файла ,display-вывод на экран. Надо чтоб при вводе текста, если...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
01.09.2012, 03:14 #2
вопрос двусмысленный.
все, что генерируется библиотекой STL - это исключения, которые унаследованы от стандартного std::exception.

Но из недр библиотек могут лететь и другие исключения, у которых может быть общий предок и он не обазятельно унаследован от стандартного.

Например при попытке вставить объект в вектор и в случае нехватки памяти вылетит стандартное std::bad_alloc. Но если память выделилась, дальше зовется конструктор копирования вставляемого объекта. Ну и из этого конструктора может вылететь что-угодно. Поэтому, если написать такой код:

C++
1
2
3
4
5
6
7
8
try
{
  vector<Foo> v;
  v.push_back(Foo());
}
catch (std::exception&)
{
}
То это не перехватит всех возможных исключений, которые могут возникнуть в данном коде.


Резюме: Какого-то базового исключения для всех типов исключений не существует.
Можно только ставить catch(...), но тут тип исключения неизвестен.
Надо сказать, есть хитрый трюк для идентификации типа исключения в рантайме, и его можно применить для преобразования одного типа исключения в другое. Но код преобразования нужно писать самостоятельно для каждого типа исключения.
1
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
01.09.2012, 17:28  [ТС] #3
Цитата Сообщение от DU Посмотреть сообщение
вопрос двусмысленный.
все, что генерируется библиотекой STL - это исключения, которые унаследованы от стандартного std::exception.

Но из недр библиотек могут лететь и другие исключения, у которых может быть общий предок и он не обазятельно унаследован от стандартного.

Например при попытке вставить объект в вектор и в случае нехватки памяти вылетит стандартное std::bad_alloc. Но если память выделилась, дальше зовется конструктор копирования вставляемого объекта. Ну и из этого конструктора может вылететь что-угодно. Поэтому, если написать такой код:

C++
1
2
3
4
5
6
7
8
try
{
  vector<Foo> v;
  v.push_back(Foo());
}
catch (std::exception&)
{
}
То это не перехватит всех возможных исключений, которые могут возникнуть в данном коде.


Резюме: Какого-то базового исключения для всех типов исключений не существует.
Можно только ставить catch(...), но тут тип исключения неизвестен.
Надо сказать, есть хитрый трюк для идентификации типа исключения в рантайме, и его можно применить для преобразования одного типа исключения в другое. Но код преобразования нужно писать самостоятельно для каждого типа исключения.

т.е. придется самому класс для данного исключение писать или можно что то из буста вытащить ??? уже готовое (или из других библиотек ) ???
0
PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
01.09.2012, 17:29 #4
Цитата Сообщение от Leeto Посмотреть сообщение
что б перехватывало
а ля

C++
1
2
3
4
5
6
7
8
9
unsigned int a = - 2 ; 
 
try 
{
cout << a ; 
}
 
catch (??? ) 
{}
Даже если компилятор даст тебе положить туда -2 - это уже будет не -2, а чтото около 65533 наверно, т.к. отрицательные числа представляются старшим битом. Короче нет такого.
1
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
01.09.2012, 17:39 #5
Цитата Сообщение от Leeto Посмотреть сообщение
что б перехватывало
а ля

C++
1
2
3
4
5
6
7
8
9
unsigned int a = - 2 ; 
 
try 
{
cout << a ; 
}
 
catch (??? ) 
{}
Тут и не должно быть исключения. В переменной a у тебя будет лежать значение 4294967294.
1
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
01.09.2012, 19:01  [ТС] #6
Цитата Сообщение от lazybiz Посмотреть сообщение
Тут и не должно быть исключения. В переменной a у тебя будет лежать значение 4294967294.
вот мне и на до чтоб там не 4294967294 а перехват был

Добавлено через 1 минуту
Цитата Сообщение от PSIAlt Посмотреть сообщение
Даже если компилятор даст тебе положить туда -2 - это уже будет не -2, а чтото около 65533 наверно, т.к. отрицательные числа представляются старшим битом. Короче нет такого.
чо самому писать что ли ???

это получается что а ля
если int_max (или как его там ) то ловить, да ?

А если я хочу немного с реюзабительностью а ля для дабл или лонг
если какая ниб стандартная функция которая возвращает макс значение примитивного типа ?:

а ля макс оф тайп
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
01.09.2012, 19:03 #7
Цитата Сообщение от Leeto Посмотреть сообщение
вот мне и на до чтоб там не 4294967294 а перехват был

Добавлено через 1 минуту


чо самому писать что ли ???

это получается что а ля
если int_max (или как его там ) то ловить, да ?
Боюсь в твоем случае это нереально.
Возможно тут помогут какие-то специальные конструкции.
1
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
01.09.2012, 19:05  [ТС] #8
Цитата Сообщение от lazybiz Посмотреть сообщение
Боюсь в твоем случае это нереально.
Возможно тут помогут какие-то специальные конструкции.
а как же там бед аллокейшен и все такое ??? это не из этой оперы ?

еще всякие там стандартые элементы видел (не юзал правда никогда ) под названием empty ??? мож они в тему будут

или там взять auto_ptr или boost::share_ptr и типа у них там вроде как эмпти тоже есть и проверять на емтинесс ???
ну типа если эмпти то перехватывать ???

такое прокатит как думаете госпада ? помогите пожалуйста
заранее спасибо
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
01.09.2012, 19:23 #9
Leeto, C++11 это тупо скомпилировать не позволит (если использовать новый синтаксис инициализации).

http://liveworkspace.org/code/458576...f14a157d3252b1

Добавлено через 49 секунд
Leeto, Есть, которая возвращает максимум для типов...

C++
1
std::numeric_limits<T>::max();
Добавлено через 13 минут
а как же там бед аллокейшен и все такое ??? это не из этой оперы ?

еще всякие там стандартые элементы видел (не юзал правда никогда ) под названием empty ??? мож они в тему будут

или там взять auto_ptr или boost::share_ptr и типа у них там вроде как эмпти тоже есть и проверять на емтинесс ???
ну типа если эмпти то перехватывать ???
Вроде и буст юзаешь и многие другие вещи, а вопросы задаешь какие-то непонятные... Вопроса абсолютно не понял, причем тут smart пойнтеры вообще? Причем тут bad_alloc? Это инициализация стандартных типов. Прямая инициализация стандартных типов не контролируется ничем. Потому как size_t i = -1 не является некорректным.
1
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
01.09.2012, 19:30  [ТС] #10
Цитата Сообщение от ForEveR Посмотреть сообщение
Вроде и буст юзаешь и многие другие вещи, а вопросы задаешь какие-то непонятные...

да ну перестань я быдло кодер до сих пор ... юзаешь громко сказано... пытаюсь юзать ....
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
01.09.2012, 19:56 #11
Цитата Сообщение от Leeto Посмотреть сообщение
чо самому писать что ли ???
это получается что а ля
если int_max (или как его там ) то ловить, да ?
нет
просто проверь старший бит
C++
1
2
if((value&0x80000000)!=0)
  //ошибка
если ты не знаешь размер int
то можно написать так
C++
1
if(value&(0x01<<(sizeof(int)*8-1))!=0)
разумеется на машинах с байтом равным 8 битам

можно вот так
C++
1
if(value&(~((-1)/2))!=0)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2012, 19:56
Привет! Вот еще темы с ответами:

Вот часть кода, в нем я должен сделать если я ничего не ввожу то чтоб вывело сообщение о том что пользователь не ввел данных, но у меня не выходит - C++
void Magazine::Input() { system(&quot;cls&quot;); //locale::global(locale(&quot;&quot;)); gotoxy(25,1); const int...

В window 7 есть стандартное средство чтоб через аналоговый модем звонить? - Windows 7
В window 7 есть стандартное средство чтоб через аналоговый модем звонить на обычный телефон (тот который проводной)

Что происходит если вызывается необработанное исключение - C#
Допустим у меня есть WCF служба, допустим я забыл обработать одно исключение, что произойдет в результате срабатывания исключения? Служба...

Сгенерировать исключение, если в текстбоксе есть цифры - C#
Пишу программу и не могу разобраться... Суть программы я заполняю информацию о человеке ( его ФИО, номер и так далее). Как сделать, чтобы,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.09.2012, 19:56
Ответ Создать тему
Опции темы

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