当使用现代和最新的 C++ 编译器(例如 MSVC2015)并激活预编译头时,当前关于包含 Qt 头文件的“最佳实践”是什么?
Example:
#include <QStringList>
#include <QTreeWidget>
#include <QListWidget>
vs.
#include <QtCore>
#include <QtGui>
我应该为新项目选择什么约定?
两者的优点/缺点是什么?
新项目更常见的是什么?
据我所知,Qt 包含和预编译头没有具体的限制/建议/优点/缺点。当包含第三方头文件(Qt 或 boost 或其他)时,适用相同的规则。
一般来说(对于 Qt 包含是这样,但对于任何其他第三方包含也是如此,例如 STL,甚至当包含您自己的代码时),您应该使包含最少。包含的文件越少,编译速度就越快。包含实际不需要的文件会使编译速度变慢。此外,如果您包含但不使用的此类头文件被编辑/修改(一般情况下,第三方头文件不应出现这种情况),则包含它的任何文件都需要重新编译,即使它没有真正使用包含的代码......
因此,一般规则是仅包含您真正需要的文件。所以如果你的文件只需要QStringList
,更喜欢包括<QtCore/QStringList>
而不是<QtCore>
.
如果您担心编译时间,还要确保在必要时仅包含头文件 (.h) 中的文件,如果可以使用前向声明,请使用它并且仅包含实现 (.cpp) 中必要的头文件。当头文件被修改时,这将大大减少项目的编译时间(读这个 https://stackoverflow.com/questions/3962708/how-much-do-forward-declarations-affect-compile-time).
现在,如果您的项目有很多文件,其中包括一些Qt文件,您可以使用预编译头来优化编译。这些文件将被编译一次且仅一次。但是,由于所有文件最终都将使用相同的预编译头(本身包括许多头文件),因此您应该仅在以下情况下执行此操作:
- 预编译头文件应该主要是第三方头文件,这样它们就不会被改变。因为如果发生更改,那么所有文件都需要重新编译......
- 编译器必须支持预编译头(否则,编译可能会工作,但最终也可能会变慢,因为每个文件最终都会包含项目的所有预编译头......所以可能比实际需要的文件更多)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)