Страница 4 из 4

Re: Как бросить своё исключение?

Добавлено: 03 сен 2015, 10:44
Romeo
Сионист писал(а):Так две, или куча? Судя по тому, как Вы путаетесь в числах, не искали именно Вы. Или только сейчас поискали. Мне тоже вышла куча, но всей кучи не хватило.
Ты забавно выглядишь, когда начинаешь к словам придираться, причём трактуя их по-своему :)

Ссылок куча. Я взял из них две первые и объяснил, что в них можно прочитать. Так всё сходится? Никаких противоречий?

Достаточно перейти по первым двум, прочесть всё, осознать это и этого будет достаточно. Я очень сомневаюсь, что эти две темы всплыли в топ только сейчас и раньше были недоступны. Делаю предположение, что тебе было их просто лень читать, либо не получилось осознать то, что там написано.

Re: Как бросить своё исключение?

Добавлено: 03 сен 2015, 11:11
Сионист
Так в том то и дело, что перейти по ссылкам на первых двух десятках страниц не достаточно.

Re: Как бросить своё исключение?

Добавлено: 03 сен 2015, 11:54
Оксалайя
Сионист писал(а):Так в том то и дело, что перейти по ссылкам на первых двух десятках страниц не достаточно.

Вы правы, нужно ещё напрячься, прочитать и осознать прочитанное. А не бежать на форум и просить, чтобы Вам всё разжевали.

Re: Как бросить своё исключение?

Добавлено: 04 сен 2015, 07:55
Сионист
Оксалайя писал(а):Вы правы, нужно ещё напрячься, прочитать и осознать прочитанное. А не бежать на форум и просить, чтобы Вам всё разжевали.
Прочитать тоже не достаточно. И даже пройти по ссылкам на тех страницах и прочитать страницы, на которые ведут уже эти ссылки. Потому что везде или throw без операндов и catch с тремя точками, или вообще общие слова, не имеющие отношения к c++.

Re: Как бросить своё исключение?

Добавлено: 04 сен 2015, 08:15
somewhere
Да глупость это. Вот первая ссылка ведет на MSDN, в котором в первом же примере функция кидает исключение разных типов и там же их ловят, выполняя разные блоки кода в зависимости от типа исключения.

Re: Как бросить своё исключение?

Добавлено: 04 сен 2015, 09:10
Сионист
Эйси. А как создать и бросать своё? Ни слова, просто бросаются чёрные ящики в виде исключений и всё. Чем это лучше пустой пропаганды исключений вместо кодов возврата вообще без даже намёка на c++ код?

Re: Как бросить своё исключение?

Добавлено: 04 сен 2015, 09:57
Romeo
Бросать можно объект любого типа, от встроенного до объекта собственного класса. Никакого отличия при этом не будет. Все же остальные вещи, которые описаны в этой статье очень важны и актуальны. Например размотка стека.

В чём преимущество перед кодами возвратов.

1. Исключению можно дать осмысленное имя. С кодами возвратов это можно сделать только через #define, который между прочим ничего не гарантирует и не защищает от ошибок.

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

3. Исключения можно выстраивать в иерархии и где-то ловить конкретное исключение, а где-то, где это требуется, сразу целый набор исключений по базовому классу. С кодами возвратов такое сделать если и получится, то это будет настолько неочевидно и негибко, то чёрт ногу сломит.

4. Есть места, из которых просто невозможно вернуть код возврата. Пример - это конструктор. Его сингатура закреплена стандартом языка. Как сигнализировать об ошибке? Только бросив исключение.

Re: Как бросить своё исключение?

Добавлено: 04 сен 2015, 15:25
Сионист
Romeo писал(а):Бросать можно объект любого типа, от встроенного до объекта собственного класса. Никакого отличия при этом не будет. Все же остальные вещи, которые описаны в этой статье очень важны и актуальны. Например размотка стека.

В чём преимущество перед кодами возвратов.

1. Исключению можно дать осмысленное имя. С кодами возвратов это можно сделать только через #define, который между прочим ничего не гарантирует и не защищает от ошибок.
Что то осмысленности "имён" исключений я как раз и не заметил. А коды возварата отлично обходятся без дефайнов. Ни nullptr, ни quiet_NaN, ни infinity, ни возврат структуры с енам-полем в дефайне вообще не нуждается, я даже не смогу прикрутить к ним дефайн. Но если функция A вызвала функцию B, та вызвала функцию C, а та функцию D, ошибка возникла в функции D и может быть адекватно обработана только в A, то с кодами возврата будет много проблем, а исключения этим не страдают.

Re: Как бросить своё исключение?

Добавлено: 04 сен 2015, 15:26
Сионист
Romeo писал(а):3. Исключения можно выстраивать в иерархии и где-то ловить конкретное исключение, а где-то, где это требуется, сразу целый набор исключений по базовому классу. С кодами возвратов такое сделать если и получится, то это будет настолько неочевидно и негибко, то чёрт ногу сломит.
Получится. Но очень громоздко. Я такие извращения не люблю.