Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
96 / 96 / 21
Регистрация: 25.04.2012
Сообщений: 449
1

try catch throw для чего нужны?

26.02.2013, 15:58. Показов 3468. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Для чего нужны эти операторы?
Линканите пожалуйста статью, где доходчиво объяснено их применение, в разных вариантах
(например я видел throw без остальных конструкций, а в статьях такого описания нету)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.02.2013, 15:58
Ответы с готовыми решениями:

Try - catch - throw для чего они
Есть код программы принимающей температуру и заводит в вектор, она еще не доработана, Страуструп пишет что защиту от ошибок можно сделать с...

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

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

17
Неэпический
 Аватар для Croessmah
18124 / 10709 / 2063
Регистрация: 27.09.2012
Сообщений: 26,997
Записей в блоге: 1
26.02.2013, 16:04 2
Для обработки исключений
0
433 / 368 / 149
Регистрация: 06.08.2012
Сообщений: 961
26.02.2013, 16:05 3
для обработки исключений.

Добавлено через 16 секунд

Не по теме:

опоздал.

0
Неэпический
 Аватар для Croessmah
18124 / 10709 / 2063
Регистрация: 27.09.2012
Сообщений: 26,997
Записей в блоге: 1
26.02.2013, 16:06 4
Использование исключительных ситуаций C++ для обработки ошибок
0
 Аватар для Develops
15 / 15 / 1
Регистрация: 19.02.2013
Сообщений: 41
26.02.2013, 16:28 5
Немного убогий пример приведу.
Например программа генерирует случайные числа в диапазоне от 0 до 50. Нем необходимы числа больше 20. Числа, меньше 20 у нас будут исключениями, которые мы так же сможем обработать.
Рассмотрим код следующей программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <math.h>
 
using namespace std;
 
int main()
{
   void func(void);
   func();
   return 0;
}
 
void func(void)
{
    int num;
    try
    {
        num = rand(); // Чтобы не усложнять код, представим, что rand генерирует число именно в нужном нам промежутке.
        if(num < 20)
            throw num; // Если число меньше 20, генерируем исключение. Выполнение кода в блоке try {...} прерывается.
        // В ином случае продолжаем работу со сгенерированным числом.
        cout << "Наше число: " << num << endl;
    }
    catch(int n) // В этом блоке мы ловим исключение и делаем с ним что хотим. Например, выводим оповещение.
    {
        cout << "Слишком маленькое число: " << n << endl;
    }
}
К сожалению, про throw без блоков try и catch в c++ я рассказать ничего не могу.
Вообще, вот неплохая статья по теме.

Добавлено через 1 минуту
Тоже опоздал
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2013, 16:57 6
Tiva, в простой ситуации, например при опасности деления на 0, можно самостоятельно проверить знаменатель и обработать ситуацию. Можно выдать сообщение, которое подскажет, ошибку и пригласить ввести новое значение и т.п. В случае когда вызывается библиотечная функция с большим количеством аргументов, причину сбоя предусмотреть труднее, особенно учитывая, что сбой может возникнуть по ряду причин от программы не зависящих: неготовность устройства, не выделение памяти и др. Тогда и сбой возникает в коде к которому нет доступа, например в ядре OS. Однако хорошие функции и классы имеют документацию, в которой описаны исключения, которые они генерируют. В этом случае например, механизм исключений дает возможность проанализировать причину, выдать сообщение, предотвратить крэш.
0
 Аватар для Kastaneda
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
26.02.2013, 19:02 7
Цитата Сообщение от IGPIGP Посмотреть сообщение
в простой ситуации, например при опасности деления на 0
более того - деление на 0 нельзя обработать при помощи try {} cath().
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
26.02.2013, 19:24 8
Цитата Сообщение от Kastaneda Посмотреть сообщение
деление на 0 нельзя обработать при помощи try {} cath()
Можно, если установить соответствующим образом транслятор исключений из структурных в типизированные.
2
 Аватар для Kastaneda
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
26.02.2013, 19:57 9
Цитата Сообщение от HighPredator Посмотреть сообщение
Можно, если установить соответствующим образом транслятор исключений из структурных в типизированные.
Можно пример?
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
26.02.2013, 20:30 10
Kastaneda, Что возвращать при делении на ноль?
1
 Аватар для Kastaneda
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
26.02.2013, 21:05 11
Ну я так и думал, что это что-то ОС специфичное - просто сторонняя плюшка для С++.
Но все равно пример интересный, раньше такого не видел.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2013, 21:27 12
Цитата Сообщение от Kastaneda Посмотреть сообщение
Можно пример?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//VS2008 -> Свойства проекта -> C/C++ -> Cоздание кода -> Да, с SEH исключениями (/EHa)
#include <iostream>
#include <Cmath>
using namespace std;
int main()
{
int a=1;
int b=0;
int c=0;
 
try{
c=a/b;
    //b=log(a);
}
catch(...){
cerr<<" Ai! "<<endl;//Ai!
}
cout<<endl;
system("pause");
return 0;
}
0
 Аватар для Kastaneda
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
26.02.2013, 21:35 13
Да, про /EHa я уже почитал.

[занудство]
все равно в С++ нельзя отловить деление на 0 при помощи try{} catch(), в привиденых примерах это делается средствами определенного компилятора, пр-ва microsoft, который в свою очередь генерит специфичный для винды код, вместо обычного try{} catch()
[/занудство]

Не по теме:

а вот это

C++
1
#include <Cmath>
делает код совсем не переносимым:)

0
26.02.2013, 21:53 14

Не по теме:

Kastaneda, а что делать, если по стандарту языка деление на ноль - undefined behaviour...

1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2013, 21:57 15
Цитата Сообщение от Kastaneda Посмотреть сообщение
C++
1
#include <Cmath>
делает код совсем не переносимым[/OFF]
Да, я пробовал логарифм отрицательного числа, потом что-то изменил, а что-то закоментил, а эту строку забыл. Занудство.
Заголовок топика, как я понял, не предполагает дискуссий о иерархиях классов исключений, для каскадной обработки. Разве существенно, конкретно, как обработать тот или иной тип, когда вопрос задан вообще?
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1257 / 1006 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
26.02.2013, 23:57 16
Цитата Сообщение от HighPredator Посмотреть сообщение

Не по теме:

Kastaneda, а что делать, если по стандарту языка деление на ноль - undefined behaviour...

Не по теме:

Что делать, что делать... Быть параноиком и не делить на что попало.

0
27.02.2013, 08:54 17

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Да, я пробовал логарифм отрицательного числа, потом что-то изменил, а что-то закоментил, а эту строку забыл.
да не, я не об этом, просто например в Linux'е <cmath> и <Cmath> это 2 разных файла, Так что на твой <Cmath> он бы написал, что нет такого файла.

0
27.02.2013, 13:25 18

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
да не, я не об этом, просто например в Linux'е <cmath> и <Cmath> это 2 разных файла, Так что на твой <Cmath> он бы написал, что нет такого файла.
Дык и я ж о том же. Если человек спрашивает: а зачем try и cath и ни грамма конкретнее, то значит об этом ему и нужно рассказать? А мы ушли в настройки компиляторов (зависимые). :pardon:
Теперь ещё о совместимости библиотек говорим. Но ведь по теме это не важно? Помните как пишут в книжках, - "...в предлагаемых примерах, мы намеренно опустили ряд фрагментов, чтобы не затенять суть излагаемого вопроса..." и т.п.? :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.02.2013, 13:25
Помогаю со студенческими работами здесь

try-throw-catch
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; class Drob { public: int obchuslennia (int a, int...

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

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

Try,catch,throw,OVERFLOW!
Добрый вечер! И СНОВА с вами try..catch...:p Я очень долго пытался понять try-catch сам, читал везде, где только можно(ссылки давать...

Try Throw Catch пример
Как-то не особо много инфы нарыл по данной теме... Может у кого есть какие уже реализованные примеры?


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Что нового в C# 14
UnmanagedCoder 10.03.2025
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной. Что стоит отметить, так это влияние сообщества разработчиков на формирование новых. . .
Формулы поворота
Igor3D 10.03.2025
Добрый день Тема Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости". x' = x * cos(a) - y * sin(a) y' = y * cos(a) + x * sin(a) Как бы Вы их. . .
Что нового в .NET 10
UnmanagedCoder 10.03.2025
. NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация. . .
Отложенное высвобождение, RCU и Hazard Pointer в C++26
NullReferenced 09.03.2025
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и. . .
Неблокирующийся стек на C++26
NullReferenced 09.03.2025
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся. . .
Обработка строк в C++26: Новые возможности string и string_view
NullReferenced 09.03.2025
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view. string_view - это невладеющая ссылка на последовательность символов, появившаяся в. . .
Мой первый аддон для Blender 3D, с помощью нейронки (не зная даже азов пайтона, но это не значит что так и с остальным).
Hrethgir 09.03.2025
Потратил весь день. Пол-дня мне хватило, чтобы понять что с версией с 14B мне не одолеть написание функционального кода, на языке с которым я вообще никак не знаком - пайтон. Версия 22B от другого. . .
Einstein@Home сегодня исполняется двадцать лет!
Programma_Boinc 09.03.2025
Einstein@Home сегодня исполняется двадцать лет! Отправлено 19 февраля 2025 года в 17:20:21 UTC Я хочу поздравить всех наших волонтеров, разработчиков и ученых из Einstein@Home. Мы официально. . .
Заполнители и расширенный набор символов в C++26
NullReferenced 09.03.2025
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они. . .
Контракты в C++26
NullReferenced 09.03.2025
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru