C/C++ static 关键字

在 C/C++ 中,static 关键字使用恰当可以大大提升程序的模块化特性。
 static 在 C++ 类之中和在类以外的做用不同,在C语言中的做用和在 C++ 类以外的做用相同,下面一一说明:

在类外的做用

1.变量

局部变量

局部变量便是在函数或一个代码块内部声明的变量。模块化

当局部变量被定义时,系统不会对其初始化;
做用域为函数或一个代码块;
局部变量储存在栈里,离开做用域就会无效。

在局部变量前面加上关键字 static,该变量变为静态局部变量。函数

变量在定义时,必须初始化,若是没有初始化,系统会自动对其初始化,如 int 型初始化为 0;
储存在全局变量区,一直存在直到程序运行结束。

静态局部变量至关于一个全局变量!!!this

全局变量

全局变量是在函数体外部声明的变量。.net

在全局变量区分配存储空间,且编译器会自动对其初始化;
做用域为整个程序,即包括所用的源文件和头文件;
其余文件可使用extern外部声明后直接使用,其余文件不能定义相同的变量。

一样,在全局变量前面加上关键字 static,该变量变为静态全局变量。指针

只能在本文件中访问,不能在其它文件中访问,即使是extern外部声明也不能够;
做用域只在本文件;
其余文件能够定义与其同名的变量,二者互不影响。

2.函数

函数就是完成特定任务的独立程序代码单元。
static 在函数的使用方法是在函数的返回类型前面加上 static。其做用与全局变量相似。code

静态函数只在声明它的文件中可见,其余文件不能引用该函数;
其余文件能够定义与其同名的变量,二者互不影响;

在类中的做用

一个类包含 数据成员 和 成员函数;对象

数据成员

在数据成员前加上 static 关键字,声明静态数据成员。blog

静态数据成员存储在全局变量区,静态数据成员在定义时分配存储空间;
在使用以前必须初始化,它的初始化在main()以前;
静态数据成员不属于任何对象。即便不定义类的任何对象它们也存在,在整个程序中只有一个,并且全部对象均可以对它进行操做;

与静态全局变量相比,静态数据成员变量不与程序中的其余全局变量冲突。作用域

成员函数

在成员函数前加上 static 关键字,声明静态成员函数。其做用与静态数据成员相似。get

静态成员函数不属于任何对象。调用时,它们无 this 指针,任何对象均可以调用;
静态成员函数不能为 virtual、const 或 volatile;
静态成员函数的地址能够存储在常规的函数指针中,但不能存储于成员函数指针中;

总结

这是我写的第一篇,有不少不足之处,但写下去就必定有进步。
static这个关键字颇有用,能够尽可能将只在本文件使用的全局变量和函数使用 static 关键字声明,一样,若是类中有一个数据成员对于全部对象来讲,如球都是圆的等等,尽可能使用 static 声明。

参考:
cppreference.com
C语言中的static 详细分析

相关文章
相关标签/搜索