class 成员函数的定义

Definition of function which is the class member

我有两个函数,它们是class"Data"的私有成员:

class Date
{
private:
    bool leapYear(int y);
    void fillDate(int d, Month m, int y);
};

那么,在哪里定义这个函数最好:

你可以在这里选择。以下是一些可以让您下定决心的想法:

  • 内联速度不再是问题,因为编译器现在擅长 link 时间优化。所以性能不应该是这里的决定因素(编译速度也很重要,但这是另一袋蠕虫)。
  • 在 class 中定义的小型内联成员函数可能是 "document" 实现 class 功能的简单方法。此外,这往往会使实现保持本地化,这在阅读代码时会很舒服。但是不要过度。
  • 大函数原则上应该放在它们自己的文件中,或者至少在 class 定义之外,因为它们无缘无故地扰乱了 class 定义代码。模板代码也不例外。
  • Pimpl 也有 advantages/disadvantages,但在这里我看不出有什么好的理由在你的简单案例中引入这样的野兽。它们通常用于减少头文件之间的依赖性。

这里,如果实现比较小,可以把代码写成inline,在class里面。但是如果逻辑复杂,你应该把它们放在它们自己的实现(.cpp")文件中。

您也可以开始内联,当代码变得更复杂时,将实现移到它自己的文件中。

我个人的理念是将所有函数定义放入实现 (.cpp) 文件中,因为首先,它将声明(+ 文档)与定义分开,这增加了 IMO 代码的清晰度,其次,将所有定义放在一个地方(实现文件)使我更容易找到功能。根据我的经验,必须在头文件和实现文件之间切换以查看我正在寻找的这个特定函数是在头文件中内联/定义的还是在实现文件中,这总是很麻烦。在实现文件中包含所有函数定义意味着我知道我会在该文件中找到 any 函数的定义,而不必浪费时间切换和四处寻找。

我强烈建议您不要考虑选项 2。如果您将此文件包含在多个实现文件中,这会使链接器出现 "Multiple definition" 错误,因为定义将(由预处理器)复制到每个 .cpp 文件。