转载-C/C++中static的用法

1、什么是static?

static是C/C++中常用的修饰符,它可以用来控制变量或函数的存储方式和可见性。

(1)static的引入

在函数内部定义的变量,当程序执行到它的定义处时,就会在栈上分配空间,函数在栈上分配的空间在此函数执行结束后,就会释放掉,如果想将函数中的某个变量的值保存到下一次函数调用,可以通过static关键词实现,另外,在C++中,需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装性,要求此成员隐藏在类的内部,对外不可见时,可以将其定义为静态数据。

(2)静态数据的存储

全局(静态)存储区:分为.data段和.bss段,.data段(全局初始化区)用来存放初始化的全局变量和静态变量,.bss段(全局未初始化区)用来存放未初始化的全局变量和静态变量,程序运行结束时自动释放,其中.bss段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。

C++中static的内部实现机制:静态数据成员要在程序一开始运行时就必须存在,因为函数在程序运行中调调用,所以静态数据成员不能在任何函数内分配空间和初始化。

static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间,静态数据成员按定义出现的先后顺序依次初始化,注意静态成员嵌套时,要保证所嵌套的成员已经初始化了,消除时的顺序是初始化的反顺序。

 

2、C/C++中static的作用

(1)常见作用

  • 在修饰变量的时候,static修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,只到程序运行结束以后才会释放;
  • static修饰全局变量的时候,这个全局变量只能在本源文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以;
  • static修饰一个函数的时候,这个函数只能在本源文件中调用,不能被其它文件调用,static修饰的变量存放在全局数据区的静态变量区,包括全局静态变量和局部静态变量,都在全局数据区分配内存,定义时未给初始值的话,初始化的时候自动清0;
  • 不想被释放的时候,可以使用static修饰,比如说某个变量在函数调用结束后不想被释放,在定义变量时,可以使用static修饰;
  • 考虑到数据的安全性,当程序想要使用全局变量的时候应先考虑使用static修饰变量。

(2)静态变量与普通变量

 

(3)静态局部变量

 

3、static常见用法

posted @ 2020-08-30 17:24  liangliangge  阅读(159)  评论(0编辑  收藏  举报