static的意义:{\green{static的意义:}}static的意义:
实现类内全局变量,类内全局函数{\red{实现类内全局变量,类内全局函数}}实现类内全局变量,类内全局函数
实现模块内全局变量,模块内全局函数{\orange{实现模块内全局变量,模块内全局函数}}实现模块内全局变量,模块内全局函数
static类对象必须在类外初始化:{\green{static类对象必须在类外初始化:}}static类对象必须在类外初始化:
因为,static修饰的变量先于对象存在。
static成员函数不能被virtual修饰:{\green{static成员函数不能被virtual修饰:}}static成员函数不能被virtual修饰:
因为,virtual函数通过虚表实现多态,虚表通过this指针实现,而static不存在this指针。
static变量默认初始化为0:{\green{static变量默认初始化为0:}}static变量默认初始化为0:
static变量存在于全局静态内存区,这段内存都是0字节,所以全局变量和static变量都有初始化为0的特性。
当同时编译多个文件时{\green{当同时编译多个文件时}}当同时编译多个文件时
所有未static修饰的全局变量和函数都有全局可见性{\green{所有未static修饰的全局变量和函数都有全局可见性}}所有未static修饰的全局变量和函数都有全局可见性
static变量初始化:{\green{static变量初始化:}}static变量初始化:
C语言static变量在程序运行前就初始化,所以c语言static变量不能用变量对static变量初始化。
C++标准static变量收拾在首次使用时才会构造,在程序结束后反顺序析构。