gpt4 book ai didi

c++ - Qt 包含和预编译 header 的最佳实践?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:20 24 4
gpt4 key购买 nike

在使用激活预编译头的现代和最新 C++ 编译器(例如 MSVC2015)时,关于包含 Qt 头文件的当前“最佳实践”是什么?

例子:

#include <QStringList> 
#include <QTreeWidget>
#include <QListWidget>

对比

#include <QtCore>
#include <QtGui>
  • 我应该为新项目选择什么约定?

  • 这两者的优点/缺点是什么?

  • 新项目更常见的是什么?

最佳答案

据我所知,Qt 包含和预编译头文件没有具体的限制/建议/优点/缺点。当包含第三方头文件(Qt 或 boost 或其他)时,适用相同的规则。

一般来说(对于 Qt 包含,但对于任何其他第三方包含,例如 STL,甚至包含您自己的代码时也是如此),您应该使您的包含最少。您包含的文件越少,编译速度就越快。包含您实际上不需要的文件会使编译速度变慢。此外,如果您包含但不使用的此类头文件被编辑/修改(通常第三方头文件不应该是这种情况),任何包含它的文件都需要重新编译,即使它没有真正使用包含的代码....

所以一般规则是只包含您真正需要的文件。所以如果你的文件只需要 QStringList , 更喜欢包括 <QtCore/QStringList>而不是 <QtCore> .

如果您担心编译时间,还要确保仅在必要时包含头文件 (.h) 中的文件,如果可以使用前向声明,请使用它并且仅包含实现中必要的头文件 (.cpp) ).当头文件被修改时,这将大大减少项目的编译时间 (read this)。

现在,如果你的项目有很多包含一些Qt文件的文件,你可以使用预编译头来优化编译。这些文件将被编译一次且仅一次。但是,由于您的所有文件最终都将使用相同的预编译 header (本身包括许多 header 文件),因此您应该只在以下情况下这样做:

  • 预编译的头文件应该主要是第三方头文件,所以它们不会改变。因为如果发生变化,那么您的所有文件都需要重新编译...
  • 编译器必须支持预编译头文件(否则,编译可能会工作,但也可能会变慢,因为每个文件最终都会包含项目的所有预编译头文件……所以文件可能比实际需要的多)。

关于c++ - Qt 包含和预编译 header 的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46705043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com