static关键字在C/C++中含义
我们经常可以看到在一些语言之中static作为关键字和函数出现,只是在不同的语言中其有着不同的作用,今天我们就来分析一下static在C/C++中的具体作用。
- C语言中
static在C语言中主要有两个作用,如下:
1、局部静态变量
static修饰局部变量,被修饰的变量成为局部静态变量,其保存在内存的静态存储区,默认具有初始值,为0或空。
2、外部静态变量/函数
static第二个作用就是修饰全局变量或函数,保证全局变量和函数其作用域只在本文件内,不能被其他文件引用。
需要注意的是,对于全局变量,其本身的存储区域就是在静态存储区,生存周期都是全局的,而static的作用是限制了全局变量的作用域,即其只可在本文件内部被调用。
静态存储区:内存在程序编译的时候就已经分配好,并且一直保存不会释放,其直到程序运行结束才会被释放。一般静态存储区存储 常量、静态变量、全局变量等。
- C++中
static在C++中的作用也有两重。
1、修饰静态数据成员
在类中的成员前加上static,其就变为了静态数据成员。
1)在C++中当用static在修饰了变量,其在定义的时候不要在头文件中。因为在头文件中进行的初始化,极有可能引起重复定义,从而导致程序出错。
2)静态数据成员被该类的所有对象所共享,包括派生类对象。
3)静态数据成员可以定义为该类类型,而其他成员则不可以,只可以定义为该类的指针或引用。
4)静态数据成员可以成为类中函数的可选参数,普通数据成员则不可以。
5)需要注意的一点是,静态数据成员在const成员函数中可以被合法的改变。其值会发生确定的变化。
2、静态成员函数
当static修饰函数时,其具有的特点如下所示:
1)静态成员函数不可以调用类中的非静态成员,因为非静态成员不含有this指针。
2)声明为静态成员函数,不可以同时声明为 const、virtual、volatile函数,会产生错误
3)静态成员函数的地址可以用普通的函数指针进行存储,而普通的成员函数则需要用类成员的函数指针进行存储。