携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第33天,点击查看活动详情
讲一下static关键字
C++中的static用途其实还是比较广泛的,主要用法主要包括以下几点:
静态局部/全局变量
static可以写在一个局部/全局变量前,用来起修饰作用,表示这个变量的存储位置是在全局数据区而不是在栈段,这就使得变量的生命周期不会被代码段的生命周期所局限。在使用静态局部变量时,还可以保证变量的可见性是在代码段之内,而不会被代码段外的部分所误用或者是造成歧义,同时,保证对变量初始化为0,且仅初始化一次。静态全局变量的作用是保证变量的可见性只会局限在本源文件内,而不会被其他源文件引用,换言之,它在一定程度上做到了命名隔离,避免了变量命名的冲突。
静态函数
静态函数的作用和静态全局变量类似,都是保证隔离。这里区别于变量,函数声明其实本身默认是extern的,而变量本身则不是,它需要显式使用extern来提示编译器到其他文件中去寻找这个变量的定义。
静态成员函数
静态成员变量是可以通过类名使用::运算符直接进行访问的,这是有别于普通成员函数的最大不同。例子如下:
#include <cstdio>
class A{
public:
static StaticFunc(){
printf("call StaticFunc()\n");
}
NormalFunc(){
printf("call NormalFunc()\n");
}
};
int main() {
A::StaticFunc();
A a;
a.NormalFunc();
return 0;
}
很明显可以看出两者调用方式的不同。当然,更重要的是,由于无需对类进行实例化(即创建对象),所以静态成员函数中自然而然地无法包含对普通成员变量的访问,这也很容易理解,因为此时函数中根本就没有this这个指向当前对象的指针,而直接使用普通成员变量则是隐式地借助this指针进行访问。