C++在头文件中编写实现代码的坏处

来源:互联网 发布:岗位消防安全四知四会 编辑:程序博客网 时间:2024/05/22 00:12

http://www.dewen.io/q/5951


1 在头文件中编写代码会导致同样的二进制被多个模块反复编译内联,导致程序体积上升
2 头文件中的代码会被很多的cpp文件引用,导致重复编译,导致编译速度下降
3 由于代码被多次编译,在链接时链接器无法正确的理解这些函数的实体导致链接不通过。(除非指定了inline或static,同样不可取,见后续说明)
4 即使强制指定了inline,链接器也无法判定同名函数实体是否具有相同的功能,导致链接器只能任意撇弃实例,这可能导致inline隐藏了代码问题。
5 如果头文件中的函数代码中存在static变量,当这个函数被多个模块链接时,将产生多份static变量实例,从而导致晦涩的程序问题。


C里面一般是不允许把代码直接写在.h文件中的,但是在C++中则完全不一样:
1. 简单的代码鼓励写成inline并放在.h文件中,这样编译器可以将代码直接嵌入调用的部分、进行深层次优化并且减少调用开支。当编译器认为不适合inline时也可以自动处理。类中将实现直接写在类声明中的自动成为inline函数。
2. 模板类必须把代码写在.h中间,因为是到用时才编译的。


事实上现在的C++编译器完全可以自动处理类实现写入.h文件的情况,即使实现的成员函数前面是virtual之类不能inline的类型也不会有问题。最多只是降低编译速度而已。
综合来说最好的选择是复杂的代码写入.cpp,简单的、可以inline的代码写入.h实现成inline。


写入.h文件要考虑的另一个问题是如果你要将程序作为库发布出去,代码写在.h中会泄露你的代码,并可能影响将来的兼容性。



0 0
原创粉丝点击