Pourquoi Qt n'utilise pas la gestion des exceptions?

je me suis toujours demandé que depuis Qt utilise presque toutes les fonctionnalités C++ dans la norme et d'une manière merveilleuse et innovatrice, et chaque fois qu'il n'utilise pas une fonctionnalité particulière, il a une raison parfaitement valable et applicable pour ne pas le faire. Dans ce cas, pourquoi les classes Qt n'utilisent-elles jamais le mot-clé throw et les exceptions throw ? Quelle est leur raison d'être pour ne jamais exiger un bloc try ... catch dans notre code écrit Qt?

personnellement, je ne l'aime pas beaucoup et ne l'utilise jamais que je travaille ou non avec Qt et toujours aller avec des codes d'erreur et des valeurs de retour au lieu de jeter des objets d'exception. Mais pourquoi je ne vois pas de classe QException dans leur documentation? Quel est le point de vue des développeurs Qt à ce sujet?

62
qt
demandé sur Rohan Prabhu 2011-04-05 12:05:36

3 réponses

pour des raisons historiques, surtout. La prise en charge des exceptions dans les compilateurs a pris un certain temps à mûrir. Citant Nokia Tobias Hunger :

"Lorsque l'intervalle Qt a été commencé les exceptions n'étaient pas disponibles pour tous les compilateurs qui devaient être pris en charge par Qt. Aujourd'hui, nous essayons de maintenir la cohérence des API, de sorte que les modules qui n'utilisent pas d'exceptions depuis longtemps n'obtiendront généralement pas de nouveau code utilisant des exceptions. Vous remarquerez des exceptions sont utilisées dans certains des nouveaux modules de Qt."

je pense que ça résume assez bien.

64
répondu Frank Osterfeld 2016-05-01 19:28:17

si vous utilisez google pour" exceptions qt " vous obtiendrez beaucoup de discussions sur ce sujet. ici est une réponse" officielle":

lorsque Qt a été lancé, des exceptions n'étaient pas disponibles pour tous les compilateurs qui devaient être pris en charge par Qt. Aujourd'hui, nous essayons de maintenir la cohérence des API, de sorte que les modules qui n'utilisent pas d'exceptions depuis longtemps n'obtiendront généralement pas de nouveau code utilisant des exceptions.

You remarquerez exceptions sont utilisés dans certains des nouveaux modules de Qt.

si vous cherchez exception dans l'index de assistant (i.e. dans la documentation Qt) vous trouverez des classes d'exception, par exemple QtConcurrent::Exception.

11
répondu hmuelner 2016-04-27 14:14:55

vous pouvez lire un débat agréable, la plupart du temps civilisé sur les exceptions ici sur le KDE devel mailinglist . Puisque KDE et QT sont liés, je suppose que les mêmes problèmes s'appliquent, ce qui (si je lis le thread correctement) peut être résumé comme suit:

  • les Exceptions ont des problèmes de performance selon le compilateur.
  • protéger les utilisateurs de la bibliothèque de l'obligation d'utiliser des exceptions (en ne les jetant pas de la bibliothèque)
  • Questions autour de la spécification pour les exceptions en C++
6
répondu jilles de wit 2011-04-05 09:58:55