C++ 有效C++&引用;35最小化文件之间的编译依赖关系;。它今天仍然有效吗?

C++ 有效C++&引用;35最小化文件之间的编译依赖关系;。它今天仍然有效吗?,c++,header,dependencies,effective-c++,C++,Header,Dependencies,Effective C++,在本章中,Scott Meyer提到了一些避免头文件依赖性的技术。主要目标是避免在更改仅限于其他包含的头文件时重新编译cpp文件 我的问题是: 在我过去的项目中,我从未注意过这个规则。汇编时间并不短,但也不是不能忍受的。这可能更多地与我的项目的规模(或缺乏)有关。考虑到编译器技术的进步(例如,叮当声),这个技巧在今天有多实用 我在哪里可以找到更多使用这种技术的例子?(例如Gnome或其他OSS项目) 另外,我正在使用第二版。我认为编译器技术并没有特别进步。叮当声并不是什么神奇的东西——如果您

在本章中,Scott Meyer提到了一些避免头文件依赖性的技术。主要目标是避免在更改仅限于其他包含的头文件时重新编译cpp文件

我的问题是:

  • 在我过去的项目中,我从未注意过这个规则。汇编时间并不短,但也不是不能忍受的。这可能更多地与我的项目的规模(或缺乏)有关。考虑到编译器技术的进步(例如,叮当声),这个技巧在今天有多实用

  • 我在哪里可以找到更多使用这种技术的例子?(例如Gnome或其他OSS项目)


另外,我正在使用第二版。

我认为编译器技术并没有特别进步。叮当声并不是什么神奇的东西——如果您有依赖项,并且进行了更改,那么依赖代码就必须重新编译。对于一个大项目来说,这可能需要非常、非常长的阅读时间——几个小时,甚至几天,所以人们尽量减少这种依赖性


话虽如此,还是有可能做得过火——将所有类都变成PIMPL,向前声明所有内容,等等。这样做只会导致代码混乱,应该尽可能避免。减少编译时间是一种危险的做法,也是一种过早优化的形式。重新组织您的代码以减少编译时间(当这很重要时)是可以做到的,但代价很大

至于Gnome,Gnome在每个GObject中都有一个“私有指针”。这实现了pimpl习惯用法。这减少了源文件之间的依赖关系,并允许某种形式的封装。C项目的编译时问题更少

<>现代C++设计大量使用模板,这必然会使你的编译时间飞涨。使用pimpl习惯用法和前向声明类(尽可能不包括头)可以减少转换单元之间的逻辑依赖性(这是一件好事),但在许多情况下,这对编译时间没有帮助

使用<代码> BooS/<代码>大大增加编译时间(如果在许多源文件中间接包含Boost头),请注意,许多C++项目使用它。


我也应该提到,瘦模板习惯用法通常用来减少模板的代码膨胀。

如果你想要大型C++项目,请看QT和KDE。我想说这个指南对于任何大型项目都是有效的,不仅仅是C++编写的。我想应该注意的是,这是本书的最新版本(31),在2005。1出版。从某种意义上讲,用C++ + SWIG+其他工具,编译器技术已经退化到计算的石器时代(至少在建造时间方面)。构建大小时或甚至几天的时间是大型项目的新现实。是的,YuanWen,PIMEs是一个常见的C++习语,其中类具有一个单一字段,这是指向实现的指针。同样,在C语言中,对同一事物使用不透明结构类型也是很常见的。我觉得你的回答也很好。希望我能接受不止一个答案