作者:红台门 | 来源:互联网 | 2023-02-01 22:41
本文主要分享【static在c语言中的作用】,技术文章【static的作用】为【yanzhe1】投稿,如果你遇到c++零碎小知识相关问题,本文相关知识或能到你。static在c语言中的作用1、隐藏
本文主要分享【static在c语言中的作用】,技术文章【static的作用】为【yanzhe1】投稿,如果你遇到c++零碎小知识相关问题,本文相关知识或能到你。
static在c语言中的作用
1、隐藏
所有加上static修饰的变量和函数都只能用在该cpp文件中无法被extern。
2、保持变量内容的持久
无论是全局static还是局部static,其均在程序刚运行的时候初始化在”全局\静态区"中,在函数运行结束之后才会被释放。与全局变量相比,静态变量最主要的区别还是第1点所述的隐藏。
3、默认初始化为0
”全局\静态区"中的变量在没有初始值的情况下会被默认初始化为0,也即全局变量也有此特征。
4、c++中的类声明static
(1)static数据成员:
1)类中数据成员声明为static,则该数据成员的所有者为类本身而非类的某一个对象,也即该类的对象只拥有其拷贝。
2)static数据成员是优先于对象存在的,因此类中的static数据成员必须在类外初始化,因为static变量存放在”全局\静态区",在程序初始化的时候就已经分配内存了,而类内数据成员的初始化要在定义了该类的变量之后进行。
(2)static成员函数:
1)类中成员函数声明为static,该函数一样也是被类而非类的每个对象所拥有,static函数没有this指针(this指针是指向本对象的指针,static函数是属于类本身的,因而不可能拥有this指针,没有this指针就意味着无法指向属于本对象的数据成员,因而只能调用属于类的static数据成员),其只能调用类中的static数据成员。
2)static成员函数不能被virtual修饰,static成员函数不属于任何一个对象或者实例,因此加上virtual没有实质意义。static成员函数没有this指针,而虚函数的实现是为每一个对象分配一个vptr指针,而vptr指针是通过this指针调用的,所有不能为virtual。(虚函数的调用关系,this->vptr虚函数指针->ctable虚函数表->virtual function虚函数)
3) 所有的全局函数、类的成员函数包括static函数均存放于代码区中。
本文《static的作用》版权归yanzhe1所有,引用static的作用需遵循CC 4.0 BY-SA版权协议。