use*_*536 8 c++ include header-files
假设我有一个文件Xh,它定义了一个类X,其方法在X.cc中实现.文件Xh包含一个文件Yh,因为它需要Y来定义类X.在X.cc中,我们可以引用Y,因为Xh已经包含了Yh我是否还应该在X.cc中包含Yh?
我知道我不需要,我可以依靠标题保护来防止多重包含.但一方面,包括Yh使得X.cc更加独立于Xh(当然不能完全独立).什么是公认的做法?
另一个例子:包括<iostream>.h和.cc文件.我看到有些人这样做,有些则没有.
GMa*_*ckG 10
最小化.在标题中,更喜欢前向声明到完整定义.例如,使用iosfwd而不是代替ostream.
也就是说,Xh和X.cc代表相同的逻辑单元.如果您对Yh的依赖性发生了变化(例如,将其变为前向声明),那么您无论如何都要更改该类.所以你可以#include "Y.h"理所当然地转向X.cc.
换句话说,X.cc和Xh齐头并进.X.cc可以可靠地假设Xh中的内容因此,如果Xh的话,不需要重新包含某些东西.
在那里你依赖"包括也无妨"的资源会出现其他比你自己.例如,如果你需要Zh,即使是Yh,你也要包括它.Xh不能可靠地假设Yh的内容,因为Xh不与Yh一起使用,它使用它.
我建议在X.cc中包括Y的标题包括,即使它看起来多余.它为您提供了对依赖关系非常明确的优势.
作为相关说明,您应始终#include cpp文件的关联标头作为第一个#include'd文件.(第一个包含在X.cpp中的应该是Xh)这可以保证头部包含适当的文件来解析它自己的依赖关系,否则你可能会无意中依赖源文件中包含的顺序.
| 归档时间: |
|
| 查看次数: |
4417 次 |
| 最近记录: |