Почему Qt не использует обработку исключений?

Я всегда задавался вопросом, что, поскольку Qt использует почти все возможности С++ в стандарте и замечательным и инновационным способом, и всякий раз, когда он не использует какую-либо конкретную функцию, у нее есть совершенно правильная и применимая причина, по которой это не происходит, В таком случае почему Qt-классы никогда не используют ключевое слово throw и throw любые исключения? Каково их обоснование для того, чтобы не требовать блока try ... catch в нашем написанном коде Qt?

Лично мне самому это не нравится, и я никогда не использую его, независимо от того, работаю ли я с Qt и всегда с кодами ошибок и возвращаю значения вместо того, чтобы бросать объекты исключений. Но почему я не вижу класс QException в своей документации? Какая точка зрения разработчиков Qt на этом?

Ответ 1

По историческим причинам, в основном. Поддержка исключения в компиляторах заняла довольно много времени, чтобы созреть. Citation Nokia Голос Тобиаса:

"Когда Qt был запущен, исключения не были доступны для всех компиляторов, которые должны были поддерживаться Qt. Сегодня мы пытаемся сохранить API-интерфейсы согласованными, поэтому модули, которые имеют историю отсутствия исключений, как правило, не получат новый код с использованием исключений. Вы заметите, что исключения используются в некоторых новых модулях Qt.

Я думаю, это суммирует его в значительной степени.

Ответ 2

Если вы google для "исключений qt", вы получите много дискуссий по этой теме. Здесь является "официальным" ответом:

При запуске Qt исключения не были доступны для всех компиляторов, которые должны поддерживаться Qt. Сегодня мы стараемся поддерживать совместимость API, поэтому модули, которые имеют историю отсутствия исключений, обычно не получают новый код с добавлением исключений.

Вы заметите, что исключения используются в некоторых новых модулях Qt.

Если вы ищете исключение в индексе помощника (т.е. в документации Qt), вы найдете некоторые классы исключений, например. QtConcurrent:: Exception.

Ответ 3

Вы можете прочитать приятную, в основном цивилизованную дискуссию об исключениях здесь, в расписании рассылки KDE devel. Поскольку KDE и QT связаны друг с другом, я предполагаю, что применяются одни и те же проблемы, которые (если я правильно прочитал поток) можно суммировать как:

  • Исключения имеют проблемы с производительностью в зависимости от компилятора.
  • Защищать пользователей библиотеки от обязанности использовать исключения (не выкидывая их из библиотеки)
  • Проблемы вокруг спецификации для исключений в С++