static变量及函数总结C++

全局(静态)存储区:分为 DATA 段和 BSS 段。DATA 段(全局初始化区)存放初始化的全局变量和静态变量;BSS 段(全局未初始化区)存放未初始化的全局变量和静态变量。程序运行结束时自动释放。其中BBS段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。
在 C++ 中 static 的内部实现机制:静态数据成员要在程序一开始运行时就必须存在。因为函数在程序运行中被调用,所以静态数据成员不能在任何函数内分配空间和初始化。

static全局变量非static全局变量
1.都采用静态存储方式。
2.非static全局变量是不显式用 static 修饰的全局变量。
2.static全局变量仅存在于本源文件,非整个程序中(即如果程序中的其他文件有同样的变量,他们互不影响);非static全局变量存在于整个程序中,作用域整个文件(也就是说,如果程序其他文件里存在,则会报错);

static全局变量static局部变量
1.均全局静态区分配内存;
2.静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
3.静态局部变量始终驻留在全局静态区,直到程序结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。

不同类型变量的生存周期和作用域
全局变量
1.生命周期:程序运行期一直存在,从程序开始到程序结束;
2.作用域:全局作用域(只需要在一个源文件中定义,就可以作用于所有的源文件);
引用方法:其他文件如果要使用,必须用extern 等关键字声明要引用的全局变量;
内存分布:全局(静态存储区)。
静态变量:
1. 静态全局变量:
生命周期:程序运行期一直存在,从程序开始到程序结束;
作用域:文件作用域(只在被定义的文件中可见:static的一个作用就是隐藏)
内存分布:全局(静态存储区)。
定义方法:static关键字。
2.静态局部变量:
生命周期:程序运行期一直存在;
作用域:局部作用域(只在局部作用域可见,超过其作用域便无法被引用)
内存分布:全局(静态存储区)。
定义方法:局部作用域中用static定义。
局部变量:
生命周期:随着函数的结束,即被销毁。
作用域:局部作用域(只在局部作用于可见)
内存分布:栈区
定义方法:在局部作用域中用auto指示符定义,可省略auto。

static修饰函数
静态成员函数的作用:调用这个函数不会访问或者修改任何对象(非static)数据成员。
类的静态成员(变量和方法)属于类本身,在类加载的时候会分配内存,可以通过类名直接去访问;
非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。
静态函数只是在声明他的文件当中可见,不能被其他文件所用
1 其他文件中可以定义相同名字的函数,不会发生冲突。
2 静态函数不能被其他文件所用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值