使用C++头文件(.h)与头文件加上实现(.h + .cpp),有哪些缺点?

tun*_*nuz 6 c++ header conventions

作为一名新手C++程序员,我总是将我的类接口放在.h文件中并在.cpp文件中实现.但是我最近尝试了C#一段时间,我真的很喜欢它的清晰语法和组织文件的方式,特别是在标题和实现之间没有任何关系,你通常为每个.cs文件实现一个类,而你不需要标题.

我知道在C++中这也是可能的(你可以在.h文件中编写"内联"函数),但到目前为止,我总是看到C++项目中的文件.h.cpp文件之间有明显的区别.这种方法有哪些优缺点?

谢谢

whe*_*ies 9

有几种方法可以将C++中的两个帮助分开.首先,如果您想在不更改接口的情况下更新库,那么在C++文件中使用代码意味着您只需更新库而不是库和标题.其次它隐藏了实施.也就是说,它强迫人们只根据界面来看你的类,如果代码编写得很好,就应该关注它们.最后,这种分离带来了界面+文档的一种审美清洁.这是你必须习惯的东西,但过了一段时间它会感觉很自然(意见.)

  • "实现分离界面"的论点是伪造的.是的,编写良好的代码只关注界面.但让我们面对现实,使用单独的标题不会强迫任何人在这个问题上编写好的代码(除非你锁定实现,甚至有人*可能*使用未记录的API).这就像是说Python需要一些缩进来鼓励可读的代码. (2认同)

dri*_*eed 5

不要忘记构建时间.

将实现代码放在头文件中会使它们更容易被更改.更改头文件将导致重建包含它们的所有CPP文件,从而增加构建时间.这在大型项目中可能很重要.

我也是保持对我的库用户隐藏实现的粉丝.不幸的是,这对模板类不起作用.

我的经验法则是:在.H文件中保留声明,将定义保存在.CPP文件中.