今晚随手翻看了一下《Effective C++》,
突然对条款34: 将文件间的编译依赖性降至最低,比较感兴趣,于是又重看了一次。
对类型前向声明代替头文件引入适用的情景有了一个新的理解,
以前用的最多的是,适用指针或者引用,但文中还说到了返回值和参数都可以利用这一规则(以前觉得是不行的)。
于是网上google了一下,结果找到了《Google C++风格指南》里面关于头文件依赖的章节。
关于函数参数和返回值,文中特别强调了不能定义实现,也就是函数实现不要在h文件中。
特别是模板代码,由于必须在h文件中实现,也就不能利用前向声明的优点了。
我们再看看《Effective C++》里面是如何说的:
所以,根本原因就是分配内存大小的问题。
难怪《Effective C++》说了这样一句话:
问题发生的原因在于,在将接口从实现分离这方面,C++做得不是很出色。尤其是,C++的类定义中不仅包含接口规范,还有不少实现细节。