Я читаю «Язык программирования C++ 4-е издание» Книга и есть вопрос, касающийся пункта о обработки исключений:Бросив исключение при обработке исключения
Есть случаи, когда обработка исключений должна быть заброшена меньше тонкие методы обработки ошибок. Руководящими принципами являются:
- Не бросайте исключение при обработке исключения.
- Не бросайте исключение, которое невозможно поймать.
Если реализация обработки исключений поймает вас, то она завершит вашу программу.
Может ли кто-нибудь дать мне пример первого ситутации? Только что-то подобное приходит мне на ум, но это действительный код в соответствии с g ++:
try
{
throw 1;
}
catch(...)
{
try
{
throw 2;
}
catch(...)
{
cout << "OK";
}
}
Не думайте, что что-то является действительным, и/или делает то, что вы думаете, только потому, что она составлена! 'C++' имеет концепцию [* undefined behavior *] (http://blog.regehr.org/archives/213), которая примерно переводится как «если вы делаете что-то недействительное, все ставки отключены». Он может упасть, он может работать, он может работать, но отправляет все номера вашей кредитной карты нигерийским князьям. Заметьте, я не говорю, что этот конкретный случай (я думаю, что это не UB, просто опасно близко), но не думаю, что «он скомпилирован, это нормально». – BoBTFish
Я не могу согласиться с первым из них, но могу от души согласиться со вторым. Есть * много * раз catch-блоки могут генерировать исключения, включая одно и то же исключение (через 'throw;'). – WhozCraig