1. 在C语言中的用法
在C语言中,static关键字意味着:隐藏
- static变量存储在静态数据区,在程序一开始运行时就完成内存分配工作,因而在定义时必须进行初始化
- 在函数体内定义的局部变量,在该函数下次被调用时,继续保持原有值。这相当于实现了“全局变量的功能”,但仅在该函数体内可见
- 在函数体外定义的变量,以及static函数,在该模块(文件)中可见;
2. 在C++中的用法
对于普通的static变量及函数,其作用与C语言类似。而在面向对象部分,
- static成员变量及static成员函数属于整个类,不属于任何一个对象。
- 对于static成员变量来说,由于需要在程序一开始运行时就分配内存,而类定义体只是声明了一个类,并不会分配实际的内存空间。因而,static成员变量必须在类定义体外进行初始化。不过,有一个例外情况,static常量整型数据成员或表达式可以在类定义体内完成初始化
- 而对于成员函数来说,既可以在类定义体内,也可以在类定义体外完成定义
- 需注意的是,static关键字只需要在类定义体内使用一次,当在类定义体外进行成员变量初始化或成员函数定义时,不再需要重复使用。
最后,static成员变量与non-static成员变量相比,主要有两点不同:
- static成员变量允许是incomplete type,也就是说,
class Foo {
private:
static Foo a; //ok
Foo b; //not ok
}
- static成员变量可以作为成员函数的default argument。
最后的最后,关于C++类具体如何使用static变量及static函数,可参考这篇文章。
关于C++类实例的内存分配,可参考这篇文章。