最近在阅读代码的过程中,总是碰到标有static的函数,于是就想了解一下静态函数。到百度百科中查得,static int func()如果不是出现在类中,则不叫静态成员函数,而是一个普通的全局函数,只不过由于static的限制,它只能在文件所在的编译单位内使用。

总觉得阐述得不够深入,于是浏览高人的博客试着总结如下:

因为C 没有类,所以也就不存在成员函数这一说法。

那么就先介绍一下C中的静态变量和静态函数:

1.C中的静态变量是属于全局存储区,而自动变量则储存于栈中,故造成了其作用域的不同,静态变量作用起始于变量定义除,终结于程序结束处,而自动变量的作用范围则是其所在的函数块中。

2.C中的静态函数表示此函数作用于整个文件中,表示此函数仅供于此文件使用。因而静态函数名仅可见于其所在的文件中,这就允许在不同的文件中存在同名的静态函数。

再介绍一下C++中的静态成员变量和静态成员函数:

1.类静态数据成员在编译时被创建并被初始化,在该类的任何对象被创建前就存在,不属于任何对象,而非静态类成员变量则是属于对象所有。类静态数据成员只有一个拷贝,为所有此类所创建的对象共享。需要注意的是:类静态数据成员不能再类中进行初始化,缺省时候初始化为0,比全局变量更安全。

2.类静态成员函数也是属于整个类,不属于某个具体的对象。一般情况下,静态成员函数用于访问类中的静态数据成员和全局变量,不访问非静态数据成员。这也大概是静态成员函数的意义所在了吧!