Visual Studio允许您创建“内联”类(如果我没有弄错名称)。 所以类头和实现都在一个文件中。
小时。 file包含类和函数的定义和声明,根本没有.cpp文件。
所以我想知道这样做是否有任何惩罚?任何缺点?
非常感谢
答案 0 :(得分:8)
这样做会有什么惩罚吗?任何缺点?
是。如果您需要更改类的实现,因为这是在头文件中,该类的所有用户都需要重新编译,即使他们只应该关注接口。对于某些项目,这可能非常昂贵。
答案 1 :(得分:2)
您可以使用任何编译器将类的完整实现放在标头中。编译时通常会受到惩罚 - 标题将针对包含它的每个源文件单独编译。
在代码膨胀方面可能也会受到惩罚 - 将函数定义放在类定义中隐式声明它们是内联的,因此编译器可能会增加编译器为每个函数生成代码的可能性,而不是生成代码在一个地方,并在其他地方生成调用。
答案 2 :(得分:1)
如果你问我一个非常糟糕的主意,特别是对于大型项目。看看Lakos的“大规模C ++软件设计”,了解这种方法的缺点。
答案 3 :(得分:1)
还有另一种可能的惩罚:表现。 如果内联函数太多,这会导致代码膨胀,导致函数和循环可能无法放入目标CPU的指令缓存中的可执行文件。
答案 4 :(得分:0)
没有罚款 但这并不意味着代码实际上是内联的。
他们的inline关键字只是一个通常被忽略的编译器提示,因为在知道何时内联代码方面,编译器通常比开发人员更聪明。
答案 5 :(得分:0)
inline关键字只是编译器内联代码的提示。 Visual Studio有一个__forceinline说明符,用于使编译器在没有成本/收益分析的情况下强制内联函数。
关于__forceinline:http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx
除了大文件的编译时间之外,具有所有定义和声明的* .h文件不应该有任何区别。
答案 6 :(得分:0)
有两个“处罚”