一、修饰变量
static可以修饰变量,修饰变量又分为:全局变量、局部变量。
全局变量
static修饰的全局变量改变了链接属性,使得其具有文件作用域,不能被同一个工程下的其他源文件访问到。
局部变量
static修饰的局部变量改变了变量的生命周期,使其不再是生命周期函数,函数调用结束后保留其值。
存储位置
没有被static修饰的全局变量存储在静态区,没有被static修饰的局部变量存储在栈上。如果被static修饰后,全局变量和局部变量都存储在静态区,只是作用域不同,全部静态变量作用域具有文件作用域,函数静态变量作用域是函数体内部。而且分两个部分存储:.bss段、.data段,.bss段存储未初始化的部分,.data段存储初始化的部分。
修饰成员变量
1.共享
在C++中,static修饰的也可以修饰成员变量,普通成员变量只能通过对象访问,但静态成员变量是类的性质,为所有的对象共享,不属于某个具体对象。
2.类内声明,类外定义
static修饰的变量在类内声明,在类外定义。
3.访问形式
可以通过对象访问,也可以通过类名访问。
4.sizeof
sizeof(类)不计算静态成员变量的大小。
5.static不能出现在构造函数初始化列表中。
二、修饰函数
static可以修饰函数,修饰的函数文件作用域改变,只在当前文件中使用,其他源文件不能看到。static修饰的函数也改变了函数的链接属性。static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
static修饰成员函数
1.静态成员函数不含this指针,不能访问类中普通成员变量。
2.静态成员函数也是函数,有三种访问权限:private、protected、public。
3.调用规则
- static修饰的成员函数只能调用其他的static修饰的成员函数,但是不能调用其他的非static修饰的成员函数。
- 非static修饰的成员函数可调用其他的static修饰的成员函数,也可以调用其他的非static修饰的成员函数。