在C ++中放置内联函数的最佳实践

时间:2011-03-21 04:34:59

标签: c++

对于短函数(例如getter和setter)来说哪个更好

  1. 在类定义头文件
  2. 在头文件的末尾
  3. 在源文件中(在这种情况下,我应该使用inline关键字还是extern inline?)

4 个答案:

答案 0 :(得分:8)

您不能在源文件中放入内联函数(并将它们用作内联),因为它们的定义在编译器需要它们内联代码的点上不可用。

在其他两个选项之间,我倾向于将一个字符串放入类定义中,而将任何其他字符串放在标题的末尾。

答案 1 :(得分:1)

  

在类定义头文件

通常,除非您的构建时间更重要(假设情况不是这样,基于问题)。

之后的例外
  

在头文件的末尾

很少。我在处理令人讨厌的模板时,只是为了清理。身体通常很小,不会分散注意力,这可能会暴露实施细节(作为文档的替代品,但我认为有些人会指责我)。例如:

void compute() {
  assert(this->hasEnoughEnergyToCompute());
  ...computing
}
在某些情况下,这种方法可以保持良好的卫生习惯。我实际上已经使用了辅助文件(第四个选项)。

  

在源文件

此选项非常理想 - 如果它在您调用它的每个翻译中都可见。否则,将其发回标题。

  

在这种情况下,我应该使用inline关键字还是extern inline?

只是'内联'。实际上,您的编译器可能会隐式声明内联方法。如果所有必需的编译器都支持这一点,则完全省略它。

答案 2 :(得分:0)

我个人的偏好是将其放在头文件中:

class A
{
private:
    int a;

public:
    const int getA() const { return a; }
    void setA(int val) { a = val; }
};

因为getX,setX函数非常小,所以它们很容易适合一行。

通常,我的get和set方法通常是一行(只有少数情况下它们需要实际的非平凡代码)。

如果你有一些非平凡的代码,比如边界检查或一些额外的计算,我建议不要将它粘贴在头文件中。

答案 3 :(得分:0)

您的编码指南说要放置它们。没有 绝对规则,但总的来说:

- 在探查器讲述之前,最好避免使用内联函数     你需要它们,还有很多编程指南     禁止他们,

- 通常最好尽量避免在课堂上     与实际接口无关的定义;最     编码指南建议将实施放在     标题的结尾,或甚至包含在单独的文件中     标题。

话虽如此,如果功能如此简单以至于适合 在函数声明的行尾,我没有 认为这会伤害可读性。