我倾向于将较小函数的主体直接放入头文件
foo.h
中,而不是放入单独的实现文件foo.cc
中,因为这样编译器总是可以完整地看到这些函数并决定内联它们。
示例:
// File "foo.h":
struct Foo {
// ...
int GetCount() const { return count_; }
};
现在,任何使用
Foo
的代码都可以看到整个 GetCount
实现,并可以决定内联它。
这是好的做法吗?如果是这样,您是否也将稍大的函数定义放入头文件中?
现代编译器具有链接时间优化,因此不再需要在标头中提供可用的代码来内联函数。因此我想说,最好的做法是将声明标记为内联,但将定义放在 cpp 中。
是的,这是一个很好的做法。我认为,实际上,对于这种情况,只要您了解这些行为,那么您就可以随意内联您的函数。请注意,编译器将做出有关内联的最终决定。