在 C/C++ 中,static 关键字使用恰当可以大大提升程序的模块化特性。 static 在 C++ 类之中和在类以外的做用不同,在C语言中的做用和在 C++ 类以外的做用相同,下面一一说明:
局部变量便是在函数或一个代码块内部声明的变量。模块化
当局部变量被定义时,系统不会对其初始化; 做用域为函数或一个代码块; 局部变量储存在栈里,离开做用域就会无效。
在局部变量前面加上关键字 static,该变量变为静态局部变量。函数
变量在定义时,必须初始化,若是没有初始化,系统会自动对其初始化,如 int 型初始化为 0; 储存在全局变量区,一直存在直到程序运行结束。
静态局部变量至关于一个全局变量!!!this
全局变量是在函数体外部声明的变量。.net
在全局变量区分配存储空间,且编译器会自动对其初始化; 做用域为整个程序,即包括所用的源文件和头文件; 其余文件可使用extern外部声明后直接使用,其余文件不能定义相同的变量。
一样,在全局变量前面加上关键字 static,该变量变为静态全局变量。指针
只能在本文件中访问,不能在其它文件中访问,即使是extern外部声明也不能够; 做用域只在本文件; 其余文件能够定义与其同名的变量,二者互不影响。
函数就是完成特定任务的独立程序代码单元。
static 在函数的使用方法是在函数的返回类型前面加上 static。其做用与全局变量相似。code
静态函数只在声明它的文件中可见,其余文件不能引用该函数; 其余文件能够定义与其同名的变量,二者互不影响;
一个类包含 数据成员 和 成员函数;对象
在数据成员前加上 static 关键字,声明静态数据成员。blog
静态数据成员存储在全局变量区,静态数据成员在定义时分配存储空间; 在使用以前必须初始化,它的初始化在main()以前; 静态数据成员不属于任何对象。即便不定义类的任何对象它们也存在,在整个程序中只有一个,并且全部对象均可以对它进行操做;
与静态全局变量相比,静态数据成员变量不与程序中的其余全局变量冲突。作用域
在成员函数前加上 static 关键字,声明静态成员函数。其做用与静态数据成员相似。get
静态成员函数不属于任何对象。调用时,它们无 this 指针,任何对象均可以调用; 静态成员函数不能为 virtual、const 或 volatile; 静态成员函数的地址能够存储在常规的函数指针中,但不能存储于成员函数指针中;
这是我写的第一篇,有不少不足之处,但写下去就必定有进步。
static这个关键字颇有用,能够尽可能将只在本文件使用的全局变量和函数使用 static 关键字声明,一样,若是类中有一个数据成员对于全部对象来讲,如球都是圆的等等,尽可能使用 static 声明。