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

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

Восстановить пароль Регистрация
 
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
26.02.2013, 15:58     try catch throw для чего нужны? #1
Для чего нужны эти операторы?
Линканите пожалуйста статью, где доходчиво объяснено их применение, в разных вариантах
(например я видел throw без остальных конструкций, а в статьях такого описания нету)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2013, 15:58     try catch throw для чего нужны?
Посмотрите здесь:

C++ throw, try, catch
Try..catch..Throw C++
try-throw-catch C++
Try Throw Catch пример C++
C++ try, catch, throw
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
26.02.2013, 16:04     try catch throw для чего нужны? #2
Для обработки исключений
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
26.02.2013, 16:05     try catch throw для чего нужны? #3
для обработки исключений.

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

Не по теме:

опоздал.

Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
26.02.2013, 16:06     try catch throw для чего нужны? #4
Использование исключительных ситуаций C++ для обработки ошибок
Develops
 Аватар для Develops
15 / 15 / 1
Регистрация: 19.02.2013
Сообщений: 38
26.02.2013, 16:28     try catch throw для чего нужны? #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 минуту
Тоже опоздал
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6166 / 2895 / 282
Регистрация: 04.12.2011
Сообщений: 7,695
Записей в блоге: 3
26.02.2013, 16:57     try catch throw для чего нужны? #6
Tiva, в простой ситуации, например при опасности деления на 0, можно самостоятельно проверить знаменатель и обработать ситуацию. Можно выдать сообщение, которое подскажет, ошибку и пригласить ввести новое значение и т.п. В случае когда вызывается библиотечная функция с большим количеством аргументов, причину сбоя предусмотреть труднее, особенно учитывая, что сбой может возникнуть по ряду причин от программы не зависящих: неготовность устройства, не выделение памяти и др. Тогда и сбой возникает в коде к которому нет доступа, например в ядре OS. Однако хорошие функции и классы имеют документацию, в которой описаны исключения, которые они генерируют. В этом случае например, механизм исключений дает возможность проанализировать причину, выдать сообщение, предотвратить крэш.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
26.02.2013, 19:02     try catch throw для чего нужны? #7
Цитата Сообщение от IGPIGP Посмотреть сообщение
в простой ситуации, например при опасности деления на 0
более того - деление на 0 нельзя обработать при помощи try {} cath().
HighPredator
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,108
Записей в блоге: 3
26.02.2013, 19:24     try catch throw для чего нужны? #8
Цитата Сообщение от Kastaneda Посмотреть сообщение
деление на 0 нельзя обработать при помощи try {} cath()
Можно, если установить соответствующим образом транслятор исключений из структурных в типизированные.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
26.02.2013, 19:57     try catch throw для чего нужны? #9
Цитата Сообщение от HighPredator Посмотреть сообщение
Можно, если установить соответствующим образом транслятор исключений из структурных в типизированные.
Можно пример?
HighPredator
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,108
Записей в блоге: 3
26.02.2013, 20:30     try catch throw для чего нужны? #10
Kastaneda, Что возвращать при делении на ноль?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
26.02.2013, 21:05     try catch throw для чего нужны? #11
Ну я так и думал, что это что-то ОС специфичное - просто сторонняя плюшка для С++.
Но все равно пример интересный, раньше такого не видел.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6166 / 2895 / 282
Регистрация: 04.12.2011
Сообщений: 7,695
Записей в блоге: 3
26.02.2013, 21:27     try catch throw для чего нужны? #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;
}
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
26.02.2013, 21:35     try catch throw для чего нужны? #13
Да, про /EHa я уже почитал.

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

Не по теме:

а вот это

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

HighPredator
26.02.2013, 21:53
  #14

Не по теме:

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

IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6166 / 2895 / 282
Регистрация: 04.12.2011
Сообщений: 7,695
Записей в блоге: 3
26.02.2013, 21:57     try catch throw для чего нужны? #15
Цитата Сообщение от Kastaneda Посмотреть сообщение
C++
1
#include <Cmath>
делает код совсем не переносимым[/OFF]
Да, я пробовал логарифм отрицательного числа, потом что-то изменил, а что-то закоментил, а эту строку забыл. Занудство.
Заголовок топика, как я понял, не предполагает дискуссий о иерархиях классов исключений, для каскадной обработки. Разве существенно, конкретно, как обработать тот или иной тип, когда вопрос задан вообще?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
26.02.2013, 23:57     try catch throw для чего нужны? #16
Цитата Сообщение от HighPredator Посмотреть сообщение

Не по теме:

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

Не по теме:

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

Kastaneda
27.02.2013, 08:54
  #17

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2013, 13:25     try catch throw для чего нужны?
Еще ссылки по теме:

C++ C++ try catch throw в разных функциях
C++ Try throw catch в решении уравнения
Try - catch - throw для чего они C++

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

Или воспользуйтесь поиском по форуму:
IGPIGP
27.02.2013, 13:25     try catch throw для чего нужны?
  #18

Не по теме:

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

Yandex
Объявления
27.02.2013, 13:25     try catch throw для чего нужны?
Ответ Создать тему
Опции темы

Текущее время: 05:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru