类方法可以是内联还是静态?

时间:2010-01-25 16:12:51

标签: c++

它甚至有意义吗?

4 个答案:

答案 0 :(得分:24)

static表示该方法与类的实例无关。 (即它没有“这个”指针)。

inline是一个编译器提示,该方法的代码应该被包含在内联函数中,而不是通过普通分支调用。 (请注意,许多编译器会忽略此关键字,并使用自己的指标来决定是否内联)。

这些是正交(无关)的概念,因此没有特别的理由将它们组合起来。

答案 1 :(得分:2)

我不明白为什么不。静态类成员就像一个独立的函数,可以私有访问其他成员函数。

答案 2 :(得分:2)

是的,没有理由将这些组合起来。

答案 3 :(得分:1)

你可以。

但是,GCC手册说如果以下情况,编译器不会将该函数集成到代码中:

  1. 在定义方法之前调用方法,或
  2. 定义中有任何递归调用。
  3. 来源: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 ++中测试的评论和结果。