C/C++ 中 static 关键字解析

发布时间 2023-08-19 22:50:31作者: 肆空界

局部静态变量的特点:

  1. 全局数据区
  2. 执行到函数内对象声明处首次初始化,若没有显示初始化,自动初始化为0,且只初始化一次
  3. 始终驻留在全局区,直到程序结束,作用域为局部作用域,在函数或语句块内,生命周期到程序结束

全局静态变量的特点:

  1. 全局区
  2. 在main函数执行前分配内存并初始化

  注意:全局变量、文件域的静态变量和类的静态成员变量在main执行之前的静态初始化过程中分配内存并初始化;局部静态变量(一般为函数内的静态变量)在第一次使用时分配内存并初始化。这里的变量包含内置数据类型和自定义类型的对象。

全局变量和全局静态变量的区别:

  1. static修饰全局变量,这个全局变量只能在本文件中访问,加extern外部声明也不行,而普通全局变量在另一个文件中加了extern声明,就可以被访问,作用域是整个工程。

  注意:在同一个工程的多个文件定义同名普通全局变量,可能出现链接错误。

类内的静态数据成员和静态成员函数:

  静态数据成员:

  1. 不占用类的大小,被所有对象共享
  2. 不能放在初始化表达式初始化,要在类外全局的位置初始化
  3. 头文件实现文件分开的形式,要在实现文件初始化,否则报多重定义错误

  静态成员函数:

  1. 不含this指针
  2. 静态不能访问非静态(不含this指针,无法访问对象)
  3. 非静态可以访问非静态和静态(因为静态成员所有类对象共享)
  4. 静态想要访问非静态,可以将this指针作为参数传递进来,或者在静态成员函数内创建对象
  5. 类名加作用域限定符访问静态成员,其他非静态不能这样用