我喜欢DRY(不要重复自己)的概念,但是C++中头文件的概念违背了这个编程规则。在头文件中完全定义一个类成员是否存在任何缺点?如果对于模板来说是正确的,那么为什么不对普通类也是呢?我有一些关于利弊的想法,但你有什么看法呢?
我喜欢DRY(不要重复自己)的概念,但是C++中头文件的概念违背了这个编程规则。在头文件中完全定义一个类成员是否存在任何缺点?如果对于模板来说是正确的,那么为什么不对普通类也是呢?我有一些关于利弊的想法,但你有什么看法呢?
将所有内容放在头文件中的可能优势:
将所有内容放在头文件中的可能劣势:
问题之一是,通常实现会比类定义经常更改 - 因此对于大型项目,您最终需要为每个小更改重新编译整个代码库。
注:无需翻译内容中的英文字符和标点符号。并不是说这样做是正确的,而是在普遍情况下只能这样做。如果对于模板来说这么做是正确的,为什么对于普通类不可以呢?
就是这样。
我的大多数代码倾向于位于头文件中,但那是因为我的大多数代码都是模板。
尚未提到:每个包含文件都会实例化虚函数,因此您可以使可执行文件膨胀(我不确定这是否适用于所有编译器)。
有一个替代方案:
在源文件中声明的类中执行大量操作。 一个示例是pimpl习惯用语,但也有人害怕在头文件之外声明类。 但是,对于私有类来说,这是有意义的。
std::vector<int>
,链接器将把这3个实例合并成一个。膨胀来自于使用大量不同类型进行实例化。 - jalf