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

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

Войти
Регистрация
Восстановить пароль
 
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
#1

Насколько разумно использовать throw вместо return - C++

21.10.2012, 11:11. Просмотров 924. Ответов 14
Метки нет (Все метки)

Насколько разумно использовать throw вместо return? И является ли throw более медленным?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2012, 11:11     Насколько разумно использовать throw вместо return
Посмотрите здесь:

C++ Использовать Vector вместо array
Использовать new вместо обьявления массива из трех структур C++
C++ Изменить способ выделения памяти для массива (вместо new использовать malloc)
C++ Как разумно получить доступ к приватной переменной
Хорошо ли использовать унарный плюс вместо функции получения модуля? Если нет, то почему? C++
C++ Что использовать вместо таймера для множества точек, жизнь которых - 5 секунд
Почему в выражении нельзя использовать запятую вместо && C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
21.10.2012, 11:18     Насколько разумно использовать throw вместо return #2
Это два разных оператор для разных целей, сравнивать их не имеет смысла, тем более сравнивать их производительность.
Nick Alte
Эксперт С++
1599 / 991 / 117
Регистрация: 27.09.2009
Сообщений: 1,910
Завершенные тесты: 1
21.10.2012, 11:33     Насколько разумно использовать throw вместо return #3
Обработка исключений - штука весьма медленная, и предназначена именно для исключительных ситуаций, когда нормальное продолжение работы невозможно. Что, кстати, напоминает мне безумный комментарий из документации к MaxScript, встроенному языку 3DS Max, где они не рекомендуют пользоваться тамошним оператором return и кое-какими другими конструкциями, потому что они реализованы через исключения, и скрипты с такими конструкциями будут медленно работать.
soft.creator
 Аватар для soft.creator
103 / 103 / 4
Регистрация: 17.10.2010
Сообщений: 283
21.10.2012, 13:39     Насколько разумно использовать throw вместо return #4
Я бы сказал, что нужно использовать throw, когда результат, возвращаемый return, не может быть получен (неправильные параметры, не открылся файл, короче, результат невозможно вычислить) и return в противном случае.
silent_1991
Эксперт C++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
24.10.2012, 12:30     Насколько разумно использовать throw вместо return #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Подведём итог. Ответ на вопрос "Насколько разумно использовать throw вместо return?": это не разумно, это безумно
StasGamilton
Эксперт по пяченькам
 Аватар для StasGamilton
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
24.10.2012, 13:02     Насколько разумно использовать throw вместо return #6
Часто использовать throw, значит возникает необходимость часто оборачивать функцию в try и прописывать catch-и. Код становиться сильно "зашумленным". Читать такой код будет сложновато и становиться непонятно - ведь в таких случаях под функцией понимает (в данном случае) тот элемент, которому мы передаем параметры и получаем от нее какой-то результат. Именно получаем, а не ловим.
Еще круче будет такой класс вынести в какую-то общую библиотечку. Я не буду просматривать то, что там написано, я буду смотреть на сигнатуру, которая мне подскажет что с данной функцией я могу сделать. А писать try и catch постоянно мне тоже не хочется.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
24.10.2012, 14:25     Насколько разумно использовать throw вместо return #7
StasGamilton, noexcept, если функция не может кидать исключения, не?
StasGamilton
Эксперт по пяченькам
 Аватар для StasGamilton
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
24.10.2012, 14:47     Насколько разумно использовать throw вместо return #8
ForEveR, ну я вообще-то про вопрос разумности использования throw вместо return. Я не сталкивался с noexcept, честно сказать впервый раз от Вас услышал, но быстренько найдя немного информации, прихожу к выводу что это noexcept тут не к месту.

Не по теме:

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

ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
24.10.2012, 14:52     Насколько разумно использовать throw вместо return #9
StasGamilton, Кхм. Я не призываю использовать throw вместо return. Абсолютно разные вещи.
Я говорил об этом:
Я не буду просматривать то, что там написано, я буду смотреть на сигнатуру, которая мне подскажет что с данной функцией я могу сделать. А писать try и catch постоянно мне тоже не хочется.
Если в сигнатуре функции стоит noexcept(true) - она не будет кидать исключений.
StasGamilton
Эксперт по пяченькам
 Аватар для StasGamilton
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
24.10.2012, 15:19     Насколько разумно использовать throw вместо return #10
Цитата Сообщение от ForEveR Посмотреть сообщение
Я не призываю использовать throw вместо return
Честно даже и не подумал про это

Цитата Сообщение от ForEveR Посмотреть сообщение
Если в сигнатуре функции стоит noexcept(true) - она не будет кидать исключений.
Это я понял. Просто если человек использует вместо return throw, то в сигнатуре функции не будет noexcept, но для меня это не скажет о том, что нужно сделать - получить данные из функции или их поймать

Добавлено через 2 минуты
Даже если я пойму, что он выкидывает исключение, то встанет другой вопрос: какое исключение он выкинет? Хорошо, если будут хорошие комментарии, которые позволят отобразить необходимую информацию в качестве подсказки в современных IDE.
Psilon
Master of Orion
 Аватар для Psilon
5763 / 4711 / 622
Регистрация: 10.07.2011
Сообщений: 14,188
Записей в блоге: 5
Завершенные тесты: 4
24.10.2012, 15:24     Насколько разумно использовать throw вместо return #11
Становится понятно, почему шарп такой медленный...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        [System.Security.SecuritySafeCritical]  // auto-generated 
        internal unsafe static Int32 ParseInt32(String s, NumberStyles style, NumberFormatInfo info) {
 
            Byte * numberBufferBytes = stackalloc Byte[NumberBuffer.NumberBufferBytes];
            NumberBuffer number = new NumberBuffer(numberBufferBytes); 
            Int32 i = 0;
 
            StringToNumber(s, style, ref number, info, false); 
 
            if ((style & NumberStyles.AllowHexSpecifier) != 0) { 
                if (!HexNumberToInt32(ref number, ref i)) {
                    throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
                }
            } 
            else {
                if (!NumberToInt32(ref number, ref i)) { 
                    throw new OverflowException(Environment.GetResourceString("Overflow_Int32")); 
                }
            } 
            return i;
        }
В методе на 4 строчки 2 вызова исключения D
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
24.10.2012, 15:35     Насколько разумно использовать throw вместо return #12
Psilon, Зато безопасный.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
24.10.2012, 15:58  [ТС]     Насколько разумно использовать throw вместо return #13
ForEveR, чем опасней язык, тем больше возможностей.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
24.10.2012, 16:02     Насколько разумно использовать throw вместо return #14
Kgfq, ...выстрелить себе в ногу. Согласен конечно, да. Вот только, не столь часто нужны эти возможности. Тема для холивара, потому развивать не планирую.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2012, 12:11     Насколько разумно использовать throw вместо return
Еще ссылки по теме:

C++ Throw()
C++ Как вместо char* использовать vector<string>?
Допустимо ли вместо индекса массива использовать i-ый элемент другого массива? C++
Использовать вместо массивов - указатели C++
Как использовать оператор return? C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
25.10.2012, 12:11     Насколько разумно использовать throw вместо return
  #15
 Комментарий модератора 
Psilon, ForEveR, Kgfq, это уже выходит за рамки данного обсуждения, так что прекращайте, ребята, холиварить.
Yandex
Объявления
25.10.2012, 12:11     Насколько разумно использовать throw вместо return
Ответ Создать тему
Опции темы

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