当前"最佳做法"关于在使用现有的和最新的C ++编译器(例如MSVC2015)并且已经激活预编译头文件时包含Qt头文件?
示例:
#include <QStringList>
#include <QTreeWidget>
#include <QListWidget>
VS
#include <QtCore>
#include <QtGui>
我应该为新项目选择哪种惯例?
两者的优点/缺点是什么?
新项目更常见的是什么?
答案 0 :(得分:2)
据我所知,Qt包含和预编译头文件没有特定的限制/推荐/优点/缺点。当包含第三方头文件(Qt或boost或其他)时,适用相同的规则。
一般情况下(对于Qt包括,但对于任何其他第三方包括,例如STL,甚至包括您自己的代码),您应该使您的包含最小化。您包含的文件越少,编译速度就越快。包含您实际不需要的文件会使编译速度变慢。此外,如果您包含但不使用的头文件被编辑/修改(通常不应该是第三方头文件的情况),任何包含它的文件都需要重新编译,即使它不是真的使用包含的代码......
因此,一般规则是仅包含您真正需要的文件。因此,如果您的文件只需QStringList
,则首选包含<QtCore/QStringList>
而不是<QtCore>
。
如果您担心编译时间,还要确保只在必要时包含头文件(.h)中的文件,如果可以使用前向声明,请使用它并且只包含实现中的必要头文件(.cpp )。当头文件被修改时,这将大大减少项目的编译时间(read this)。
现在,如果您的项目包含许多包含一些Qt文件的文件,您可以使用预编译的头来优化编译。这些文件将被编译一次,只编译一次。但是,由于所有文件最终都会使用相同的预编译头文件(本身包含许多头文件),因此只应在以下情况下执行此操作:
答案 1 :(得分:0)
包含较少的标题会减少编译时间,只有这样,所以如果你这样做
#include <QtCore/QStringList>
编译它比你做的快一点
#include <QtCore>
如果您确定依赖于QtCore
中的所有内容,请将其包括在内,如果没有,请单独包含每个标题。
答案 2 :(得分:0)
我在所有项目中使用next(对于预编译的头文件):
sapply(unique(Country), function(cn)
summary(lm(IP[Country == cn] ~ IP2[Country == cn]))$r.sq)
# A B
# 0.9451881 0.9496636
仅在连接模块时才包含必要的定义。适用于msvs + qt addin或基于cmake的项目(我使用cotire)。