为什么不使用exception处理?

我一直都想知道,因为Qt几乎使用了标准中的每一个C ++特性,并且以一种奇妙的和创新的方式使用,并且每当它没有使用特定的特性时,它就有一个非常有效和适用的理由。 在这种情况下,为什么没有Qt类使用throw关键字并throwexception呢? 他们的基本原理是什么,从不需要try ...在我们的Qt编写代码catch块?

就我个人而言,我自己不喜欢它,不pipe是否使用Qt,总是使用错误代码和返回值而不是抛出exception对象。 但是为什么我在他们的文档中看不到QException类呢? Qt开发者对此有何观点?

由于历史原因,大多数。 编译器中的exception支持需要一段时间才能成熟。 引用诺基亚的Tobias Hunger :

“当Qt开始时,所有需要Qt支持的编译器都不能使用exception,今天我们试图保持API的一致性,所以有历史logging的不使用exception的模块通常不会使用添加了exception的新代码。你会注意到在Qt的一些新模块中使用了exception。

我认为这个总结了很多。

如果你是谷歌的“qtexception”,你会得到很多关于这个话题的讨论。 这是一个“官方”的答案:

当Qt开始时,所有需要Qt支持的编译器都不能使用exception。 今天我们试图保持API的一致性,所以有历史的不使用exception的模块通常不会使用添加的exception来获得新的代码。

你会注意到在Qt的一些新模块中使用了exception。

如果你在助手的索引(即在Qt文档中)寻找exception,你会发现一些exception类,例如QtConcurrent :: Exception。

您可以在KDE devel邮件列表上阅读关于exception的很好的,大多数文明的辩论。 由于KDE和QT是相关的,我假设同样的问题适用于(如果我正确地读取线程)可以概括为:

  • 性能问题取决于编译器。
  • 屏蔽图书馆用户使用例外的义务(不要将其从图书馆中扔出)
  • 有关C ++中exception的规范问题