04-static关键字

static

  • static是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性

1. 静态局部变量

  • 静态局部变量在全局数据区分配内存,局部变量在栈区分配内存
  • 静态局部变量一般在声明处初始化,如果没有显示初始化,会被程序自动初始化为0
    (局部变量不会执行默认初始化,所以一定要手动初始化 ,否则会是很奇怪的随机值)
  • 最大的优点:
    可以和全局变量一样只初始化一次,可以将值保存至下一次函数调用时,而访问范围限定在函数内,不被其他的地方访问到
    (局部变量在栈区,函数结束后立即释放内存,所以局部变量在每次调用函数时都会被初始化)

2. 静态局部变量

  • 普通全局变量虽然默认其他文件不可见,但可以通过[[11-extern关键字|extern]]实现可见
  • 静态全局变量在其他文件完全不可见,起到文件隔离,避免命名冲突的作用

3. 静态函数

  • 和静态全局变量一样,避免同名的函数冲突

4. 静态成员变量

  • 所有的对象都只维持一份拷贝,可以实现不同对象间的数据共享;不需要实例化即可访问
    (底层编译器其实将代码放在全局区所以能在不实例化的情况下访问)
  • 类内声明,类外初始化

5. 静态成员函数

  • 普通成员函数有this指针,可以访问类中的任意成员;
  • 静态成员函数没有this指针,不知道指向哪个对象,所以无法访问对象的成员变量,只能访问静态成员(包括静态成员变量和静态成员函数)
  • 若非要让静态函数发去访问非静态成员变量——需要在静态函数的形参列表里手动加上对象的地址;静态成员函数访问非静态成员方法

参考文档:
菜鸟教程:C/C++ 中 static 的用法全局变量与局部变量

comments powered by Disqus