2017-09-15 129 views
3

静态成员函数和全局函数有什么不同?静态成员函数和全局函数有什么不同?

void globalFunc() 
{ 
} 

class Test 
{ 
    public: 
    //In grammar side, object's not own this function 
    static void staticFunc(); 
}; 

静态成员函数是全球性的功能,但是,它可以与意义 分类和限制访问范围。

但我不明白为什么静态成员函数的调用约定 是[this call]。

我知道正常的成员函数必须是[this call],因为它必须需要调用者对象的地址,但为什么静态成员函数有这个调用约定呢?我认为它不需要调用者的地址,因为它不是对象的 函数。 静态成员函数和全局函数是否有区别? (语法的一面,而且偏低不)在一个类中

+1

对不起,'[这个电话]'? – Charles

+0

可以调用一个静态成员函数,就像它是一个非静态成员函数(它不会在函数中使用this)。静态成员函数不能是'extern“C''。从形式上讲,这意味着你不能将它作为C回调使用,但如果编译器具有这种不切实际的默认值,很少。 –

+0

调用约定是实现定义的。你指的是什么实现? –

回答

5

静态类中的函数

  • 访问私有和受保护静态数据成员。
  • 访问私有和受保护的静态函数。
  • 如果静态函数具有类的实例,则访问类中的私有和受保护的每实例数据成员
  • 访问私有和受保护的实例函数如果静态函数具有类的实例。
  • 在基类中具有相同名称的阴影函数。
  • 访问受保护的基类中的数据和函数。

全球非朋友功能可以不做任何这些功能。

+2

您应该添加只有STATIC成员和函数可以访问。 – FilipRistic

+0

@ArnavBorborah前两点实际上是正确的。 – juanchopanza

+0

@FilipRistic:其他也是,但你必须提供类的实例。 – Jarod42

相关问题