C++中的static关键字

static关键字的作用:

C/C++共有的作用:

1)修饰全局变量时,表示只对定义在同一个文件中的函数可见。

2)修饰局部变量时,表示变量的生命周期不因函数结束而终止。

3)修饰函数时,表示该函数只在同一个文件中被调用。

C++特有:

1)修饰类的成员变量,表示该成员变量属于该类,但不属于类的某个对象,所有对象共享该成员,这个成员只有一个实例。具体例子可以结合单例模式实现。

2)修饰类的成员函数,表示该成员函数只能访问它的参数,静态成员变量,静态成员函数,全局变量。

static关键字修饰的特点:

首先要了解c/c++的内存分布,以及static所在的区间。

对于一个完整的程序,在内存中的分布情况如下图:  
1.栈区: 由编译器自动分配释放,像局部变量,函数参数,都是在栈区。会随着作用域退出而释放空间。
3.堆区:程序员分配并释放的区域,像malloc(c),new(c++) 
3.全局数据区(静态区):全局变量和静态便令的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束释放。
4.代码区

  • 静态局部变量的特点:
  1.    在全局数据区分配内存(局部变量在栈区分配内存);
  2.    在程序执行到该变量的声明处时会被首次初始化,之后函数调用不再初始化(局部变量每次函数调用都会被初始化);
  3.   静态局部变量一般在声明处初始化,如果没有显式初始化,会被自动初始化为0(局部变量不会初始化);
  4.  静态局部变量始终驻留在全局数据区,直到程序结束,但是作用域是所在函数,不能在函数体外使用(局部变量在栈区,会随着函数调用结束而释放内存);
  • 静态全局变量特点:    
  1.    定义在函数体外,用于修饰全局变量,表示该变量只在本文件可见,不能被其他文件使用;
  2.    其他文件可以定义相同变量名,不会产生冲突;
  • 静态函数

  1. 静态函数变量只在本文件中可见,不能被其他文件使用。

  2.其他文件可以定义相同名字的函数,不会产生冲突。

  • 静态成员变量

1.静态成员变量属于类,不属于类的某个对象,所有的对象共享该成员变量。

2.静态成员变量在类内声明,在类外定义并初始化,形式举例如下:类型 类名::变量名=初始值;

  • 静态成员函数

1.静态成员函数不能访问非静态(包括成员函数和数据成员),但是非静态可以访问静态(静态成员函数属于类,不属于某个对象,对属于某个对象的非静态成员函数和数据成员一无所知,而所有对象共有静态的成员,非静态可以访问静态,静态无法访问非静态)。

2.调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以用类名::函数名调用(因为他本来就是属于类的,用类名调用很正常)。

参考文章:https://blog.csdn.net/majianfei1023/article/details/45290467

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值