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


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

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

3 62
qt

3 ответа:

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

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

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

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

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

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

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

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

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