事实:前向声明(类类型)优先于包含。
向前声明标题中的所有内容并包含该标题是否存在缺点? (我猜测编译时间不应该增加很多)
在大型代码库中,前向声明可能占用大量的屏幕空间,用一个包含替换它们会很酷 - 但是,有一个前向声明是没有意义的带有前向声明的每个标题的标题。
有没有人这样做或之前见过这个?
答案 0 :(得分:2)
我认为,如果没有走极端,转发包含几乎没有任何缺点。
我个人不关心屏幕空间。它确实比构建时间乘以2到5到10.我们曾经有超过2小时的构建时间....一些额外的前向包括可能已经消除了相同的文件被击中数千次。
无论如何,你不能总是使用前瞻声明。如果你要对某些东西进行子类化,那么你必须拥有类定义,这可能意味着包含。没关系。
要删除依赖项,您可以做的一件事就是在头文件中取消内联代码。确保将接口向上推,然后降低实现(请参阅Sutter和Alexandrescu的C ++编码标准)。如果可能,意味着您的公共API更像是抽象接口。如果你能做到这一点,那么你可以减少包含或转发声明所需的金额。
哦,也不要将数百个函数和类放在一个头文件中,因此它的长度为8000行。没有人可以阅读/理解这些文件。
答案 1 :(得分:1)
我通常在我的项目中这样做。但我在modules
中分割了前向声明。例如:gui
,core
等。这样可以在重新编译之间实现良好的平衡,因为在头文件中使用包含和在手动编写前向声明之间
答案 2 :(得分:1)
使用前向声明而不是包含的一个主要好处是,无论何时更改头文件,都不需要重新编译任何数量的源文件,因为该头文件只会包含在实际需要的地方。< / p>
您的方法可以降低此优势,在某些情况下甚至会使情况变得更糟:每次在某处添加或删除类时,您都需要更改包含前向声明的全局头文件。然后,您需要重新编译代码库中的每个源文件,包括那些不使用添加的类的文件。
尽管如此,由于课程可能不会经常添加,所以这可能是一个不太重要的权衡。