Почему Qt не использует обработку исключений? - PullRequest
65 голосов
/ 05 апреля 2011

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

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

Ответы [ 3 ]

66 голосов
/ 05 апреля 2011

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

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

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

11 голосов
/ 05 апреля 2011

Если вы поищите в Google «qt exceptions», у вас будет много дискуссий на эту тему. Здесь является «официальным» ответом:

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

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

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

6 голосов
/ 05 апреля 2011

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

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