Почему в C ++ часто обрабатываются исключения? - PullRequest
1 голос
/ 10 августа 2011

Я видел тенденцию, что многие люди не любят использовать исключения в своих программах на c ++.

Некоторые люди даже заявляют, что исключения не являются естественными для c ++.

Программисты игр обычно отключают обработку исключений.

Также в приложениях, критичных к производительности, обычно избегают обработки исключений.

Я знаю, что в С ++ не всегда была обработка исключений.

Есть ли веские причины, чтобы этого избежать?

Ответы [ 3 ]

4 голосов
/ 10 августа 2011

Есть веские причины избегать исключений:

  1. Безопасность исключений немного сложна и требует очень осторожного следования соглашениям
  2. в играх просто не так много вещей, которые могут дать сбойво время выполнения.Все, что может потерпеть неудачу, в значительной степени является инициализацией игры;загрузка файлов и т. д., которых нет в основной части производительности игры.Если игра находится в критической для игры части, стоит спросить, почему она может вообще перестать работать?
  3. раскрутка стека вызывает проблемы с отладкой программного обеспечения.Когда что-то генерируется, трудно найти, где в коде это произошло.
4 голосов
/ 10 августа 2011

У меня четыре проблемы с исключениями:

  1. Люди склонны использовать их как часть неисключительного потока программ
  2. Чтобы использовать их правильно, вам также необходимо хорошо разбираться в других методах C ++ (RAII, умные указатели)
  3. Он предлагает «легкий выход» - «набей его - я просто брошу»
  4. Без тщательного планирования вы часто сталкиваетесь с большим количеством операторов «catch» на внешнем уровне программы (или, что еще хуже, «catch-all»)

Так что я склонен не использовать их в команде с программистами с различными навыками. Они великолепны при правильном использовании.

1 голос
/ 10 августа 2011

Я не понимаю, почему люди просто не используют исключения в C ++, но что касается кода, критичного к производительности, я понимаю, почему.Обычно относительно дорого обходиться исключение по сравнению с обработкой в ​​стиле C: возвращать код ошибки и делегировать некоторую обработку ошибок для этого.Я предполагаю, что это устаревший код C ++ до того, как были реализованы исключения.Другая причина может заключаться в том, что просто не имеет смысла писать классы исключений, например, когда гораздо проще обрабатывать ошибки другим способом.Второе утверждение, которое я не могу прокомментировать, так как кажется, что оно само собой разумеющееся, дает хороший ответ (может быть связано с тем, что в C ++ не всегда были исключения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...