欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C/C++ static 关键字

程序员文章站 2023-02-06 22:53:28
在 C/C++ 中,static 关键字使用恰当能够大大提高程序的模块化特性。 static 在 C++ 类之中和在类之外的作用不一样,在C语言中的作用和在 C++ 类之外的作用相同,下面一一说明: 在类外的作用 1.变量 局部变量 局部变量即是在函数或一个代码块内部声明的变量。 在局部变量前面加上 ......
 在 c/c++ 中,static 关键字使用恰当能够大大提高程序的模块化特性。
 static 在 c++ 类之中和在类之外的作用不一样,在c语言中的作用和在 c++ 类之外的作用相同,下面一一说明:

在类外的作用

1.变量

局部变量

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

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

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

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

静态局部变量相当于一个全局变量!!!

全局变量

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

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

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

只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以;
作用域只在本文件;
其他文件可以定义与其同名的变量,两者互不影响。

2.函数

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

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

在类中的作用

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

数据成员

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

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

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

成员函数

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

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

总结

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

参考:

c语言中的static 详细分析