它甚至有意义吗?
答案 0 :(得分:24)
static
表示该方法与类的实例无关。 (即它没有“这个”指针)。
inline
是一个编译器提示,该方法的代码应该被包含在内联函数中,而不是通过普通分支调用。 (请注意,许多编译器会忽略此关键字,并使用自己的指标来决定是否内联)。
这些是正交(无关)的概念,因此没有特别的理由将它们组合起来。
答案 1 :(得分:2)
我不明白为什么不。静态类成员就像一个独立的函数,可以私有访问其他成员函数。
答案 2 :(得分:2)
是的,没有理由将这些组合起来。
答案 3 :(得分:1)
你可以。
但是,GCC手册说如果以下情况,编译器不会将该函数集成到代码中:
来源:GCC Manual - 讨论C和C ++。
我尝试使用名为Class1的小样本类在Visual C ++中编写这两种方案。这是相关的片段,其中incTest在我的Class1.h文件中定义。
// test static inline method - based on the GCC manual's C example
static inline int inc (int *a)
{
return (*a)++;
}
// test recursive call in a static inline method
static inline int fac (int x)
{
return x * fac(x-1);
}
int Class1::incTest(int* x)
{
return inc(x);
}
这是成功编译的版本。但是,如果我使用Visual C ++并且将inc()的定义移动到incTest()的定义之后,则该文件无法成功编译,在调用inc()时出现错误,“标识符不是找到”。
编辑:修改了我的答案,以考虑我在Visual C ++中测试的评论和结果。