c/c++_static变量的应用

在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

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去修饰它。

原文链接: https://www.cnblogs.com/zlintokyo/archive/2011/09/07/2169638.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/31883

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午9:10
下一篇 2023年2月8日 上午9:10

相关推荐