我正在开发一个使用STL的大型项目,并对您组织STL的首选方式提出疑问#includes
.
您是否更喜欢#include使用它的源文件中的每个标头.例如,如果两个foo.cpp
和bar.cpp
要求std::string
,然后既会#include
.
您是否希望拥有一个包含项目使用的所有STL头的头文件(即将它们添加到MS'stdafx.h'预编译头中).
第一种方法的优点是.cpp文件是一个独立的单元,可以在不同的项目中使用,而不必担心你错过了#include
.第二种方法的优点是你可以使用你的编译器预编译头支持加上你可以#includes
在STL 中pragmas
包含禁用一些警告(例如,一些Boost头在第4级编译时会引起警告).
您更喜欢使用哪种?
我只包含每个源中真正需要的头文件,而不是'catch all'头文件,以保持依赖性(以及编译时间)尽可能低.
预编译的头文件无论如何都可以工作(即我依赖预编译的头文件来加速编译过程,而不是获取声明).因此,即使通过包含的预编译头部声明了某些内容,我仍然会包含"常规"标头,它将被包含保护机制跳过,并且不会在编译时添加任何重要内容.
由于预编译头是编译器特定的东西.在我看来,优化/更改预编译头文件对代码的正确运行没有任何影响.
使依赖关系尽可能低的主要优点是重构变得更容易(或者更确切地说:可行)
关于这一切的好书是来自Lakos的大规模C++设计