[英]Rules of thumb for putting functions in header files
最近我开始将越来越多的函数放入头文件中,主要是为了方便起见。 但我担心我可能会过度使用它,我的标题充满了包含,我不确定这是不是一个好主意。
将函数移出头文件或将其移入头文件有哪些经验法则?
如果你想知道,我说的是开发应用程序,而不是库。
编辑:
我想从我的角度概述内联(自然)头函数与实现函数的优缺点是有帮助的:
专业内联:
反对内联:
根据这一点,将几乎所有函数放在头文件中似乎是一个好主意,我相信这与STL和Boost正在做的非常接近(尽管这些是库,而不是我的代码)。
我最不可侵犯的规则之一:只有头文件中允许内联的函数体。 在链接阶段,还有其他任何问题需要解决多个定义问题。
标题应该主要用于声明而不是定义。 我对该规则有例外(作为灵活类型),但它们都不涉及非内联函数体。
我的经验法则是“不在标题中,除非你必须这样做”。 为方便起见,您是否发现编译时间增加了?
有一些明显的技术方面 - 模板和内联函数必须在标题中 - 来自多个翻译单元的标题必须警惕单一定义规则 - 更直接地说,你想要一个血腥的理由甚至考虑放出一个 - 标题中的行功能实现,我想不出任何时候我都被诱惑了。
所以,问题归结为:
内联标题与实现文件中的外联?
影响因素:
一句话:如果你发现自己越来越多地做这件事,那么它显然对你有用,没有特别的理由认为你会被烧焦。 留意潜在的问题,但不要基于一些假设的和不太可能实现的问题过度设计出来的东西。
一个好的编码标准将告诉您在源(cpp)文件中实现方法和函数。
如果您愿意,可以在标题中实现模板和内联函数。
由于这已被标记为C++
,为什么不将它们分成逻辑class
?
通常我在头文件中有一个class
声明,它在相应的源文件中定义。
我使用的两个规则是
1)如果它是内联函数
2)如果它是模板功能。
首先,模板函数必须放在标题中。
此外,具有空主体的函数(例如默认构造函数或默认但虚拟析构函数)可以放在标题中。
我从不使用inline
因为编译器不保证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.