我经常在 C++ 中遇到大型的非模板类,其中简单方法直接在头文件的类主体中定义,而不是在实现文件中单独定义。例如:
class Foo {
int getBar() const { return bar; }
...
};
为什么要这样做?好像有缺点。实现没有应有的隐藏,代码可读性较差,如果类的头文件包含在许多不同的地方,也会增加编译器的负担。
我的猜测是人们打算将这些函数内联到其他模块中,这可以显着提高性能。但是,我听说较新的编译器可以在跨模块的链接时进行内联(和其他过程间优化)。对这种链接时优化的支持有多广泛,它实际上是否使这些定义变得不必要?这些定义还有其他充分的理由吗?