局部静态变量的特点:
- 全局数据区
- 执行到函数内对象声明处首次初始化,若没有显示初始化,自动初始化为0,且只初始化一次
- 始终驻留在全局区,直到程序结束,作用域为局部作用域,在函数或语句块内,生命周期到程序结束
全局静态变量的特点:
- 全局区
- 在main函数执行前分配内存并初始化
注意:全局变量、文件域的静态变量和类的静态成员变量在main执行之前的静态初始化过程中分配内存并初始化;局部静态变量(一般为函数内的静态变量)在第一次使用时分配内存并初始化。这里的变量包含内置数据类型和自定义类型的对象。
全局变量和全局静态变量的区别:
- static修饰全局变量,这个全局变量只能在本文件中访问,加extern外部声明也不行,而普通全局变量在另一个文件中加了extern声明,就可以被访问,作用域是整个工程。
注意:在同一个工程的多个文件定义同名普通全局变量,可能出现链接错误。
类内的静态数据成员和静态成员函数:
静态数据成员:
- 不占用类的大小,被所有对象共享
- 不能放在初始化表达式初始化,要在类外全局的位置初始化
- 头文件实现文件分开的形式,要在实现文件初始化,否则报多重定义错误
静态成员函数:
- 不含this指针
- 静态不能访问非静态(不含this指针,无法访问对象)
- 非静态可以访问非静态和静态(因为静态成员所有类对象共享)
- 静态想要访问非静态,可以将this指针作为参数传递进来,或者在静态成员函数内创建对象
- 类名加作用域限定符访问静态成员,其他非静态不能这样用