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 声明。
上一篇: python基础(17):正则表达式
下一篇: 23种GoF设计模式的分类