对于短函数(例如getter和setter)来说哪个更好
inline
关键字还是extern inline
?)答案 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)
您的编码指南说要放置它们。没有 绝对规则,但总的来说:
- 在探查器讲述之前,最好避免使用内联函数 你需要它们,还有很多编程指南 禁止他们,
- 通常最好尽量避免在课堂上 与实际接口无关的定义;最 编码指南建议将实施放在 标题的结尾,或甚至包含在单独的文件中 标题。
话虽如此,如果功能如此简单以至于适合 在函数声明的行尾,我没有 认为这会伤害可读性。