为什么C++方法有时在类中定义

Why are C++ methods sometimes defined inside classes?

本文关键字:定义 C++ 方法 为什么      更新时间:2023-10-16

我经常在C++中遇到大型非模板类,其中简单方法直接在头文件的类体中定义,而不是在实现文件中单独定义。例如:

class Foo {
  int getBar() const { return bar; }
  ...
};

为什么要这样做?似乎有缺点。实现没有像它应该的那样隐藏,代码可读性较差,如果类的头文件包含在许多不同的地方,编译器的负担也会增加。

我的猜测是,人们希望将这些函数内联到其他模块中,这样可以显著提高性能。然而,我听说较新的编译器可以在链接时跨模块进行内联(以及其他过程间优化)。这种链接时间优化的支持范围有多广,它实际上是否使这些定义变得不必要?这些定义还有其他充分的理由吗?

C++标准规定,类定义中定义的方法默认为inline。这会为getter和setter等简单函数带来明显的性能提升。链接时跨模块优化更难,尽管有些编译器可以做到。

通常除了更容易和节省时间之外没有其他原因。它还节省了实现文件中的一些混乱,同时占用了头文件中相同数量的行。如果只限于getter和setter之类的东西,那么可读性就很差了。

您回答了自己的问题,它们确实是内联方法。

使用它们的原因是性能。