C++学习笔记——对static的重新认识

来源:互联网 发布:淘宝卖的人参是真的吗 编辑:程序博客网 时间:2024/05/29 03:56

static 这个修饰词的意思,是为 静态;在工作所用到的C工程中,时常看到其使用,但一直没有太深的认识,最近在看了C++语言描述后,其中对与class类的成员定义中,有个更详细的static修饰用法,使得我对static的认识比之之前更多了些。

在我的c文件中,我在一开始认为:对于全局变量才用static来修饰,以便对于其进行固定,不会随意变动;后来在对函数调用时,我也时不时的使用它来修饰,完全是照搬已有的函数定义写法来定义的,于是,经常在我在其他文件调用该函数时,编译总会有错误,说找不到相关函数,即便我已经在本文件开头进行extern声明,而有的时候则完全不行,完全不知道为什么。在后来,对于新定义的函数,都基本不用static进行修饰,只对变量进行修饰,这样一来,似乎错误少了很多,也就不了了之了。

最近在进行C++学习中,有一章节有介绍static,主要是用在class上。它说,定义了一个static变量,对于这整个类来说,是唯一的,不是没创建一次对象,就有一个static变量,举个例子来说:

class Z{public:    void f(){         static int s=0;
         int a=2;         cout<<++s<<'\n'<<a<<'\n';       }};int main(){    Z z1,z2;    z1.f();        // ——>1,2    z2.f();        // ——>2,2   z1.f();        // ——>3,2return 0;}
在这里,a是局部变量,对于每个Z类的对象,a有属于它自己的值;然而对于static修饰的s,则是大家公用,一次调用就一次增加。
同样的,这让我联想到我之前在C文件中对static的用法,有了一个更加清晰的认识,对于一个用static修饰的变量/函数来说,它只能在本文件中进行使用,若是在其他文件进行调用时,则应该把这个修饰去掉,免得限定了这个函数/变量的使用范围,一直对“静态的”难以理解,现在总算是有了一个方面的理解吧。