转自:http://www.cppblog.com/dbkong/archive/2006/12/09/16169.aspx
在C语言编程中,static的一个作用是信息屏蔽!
比方说,你自己定义了一个文件 -- 该文件中有一系列的函数以及变量的声明和定义!
你希望该文件中的一些函数和变量只能被该文件中的函数使用,那么,你可以在该函数、变量的前面加上static,代表他们只能被当前文件中的函数使用!
而在C++中,用static来作为信息屏蔽就显得没有必要了!因为,C++有了信息屏蔽的利器 -- class机制!
类中的private属性的变量和函数就对外禁止访问!
然后是C/C++通用的函数作用域的static型的变量!其目的,也是为了信息的屏蔽!
int fun() {
static int a = 1;
a++;
}
在第一次进入这个函数的时候,变量a被初始化为1!并接着自增1!
以后每次进入该函数,a就不会被再次初始化了,仅进行自增1的操作!
在static发明前,要达到同样的功能,则只能使用全局变量:
int a = 1;
int fun() {
a++;
}
那么,a的值就有可能被其他函数所改变!
最后,说说类中的static变量和函数。
这种存储属性的变量和函数是同一种类的不同实例之间通信的桥梁!
#include <iostream>
using namespace std;
class A {
public:
static int num; // 统计创建了多少个实例
A () {num++}; // 每创建一个实例,就让num自增1
// 返回通过构造函数所创建过的A类实例的数目
static int how_many_instance() {
return num;
}
}
static A::num = 0; // 需要在类申明的外部单独初始化!
int main() {
cout << A::how_many_instance() << endl;
A a, b, c, d;
cout << A::how_many_instance() << endl;
system("pause");
}
一般,在类内部,是通过static属性的函数,访问static属性的变量!
补充一点,在类中,static型的成员函数,由于是类所拥有的,而不是具体对象所有的,这一点对于windows的回调机制非常有用。
因为对于回调函数而言,windows不会借助任何对象去调用它,也就不会传递this指针,那么对于一般成员函数作为回调函数的后果,就是堆栈中有一个随机的变量会成为this指针,这当然会引发程序的崩溃。
而static函数,由于是整个类的,屏蔽了this指针。因此,如果成员函数作为回调函数,就应该用static去修饰它。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?