您的位置:首页 > 编程语言 > C语言/C++

C/C++中的static变量和static函数

2011-10-24 20:56 316 查看
一. C/C++中的共同特点:

1.static变量:

1)static局部变量

2)static全局变量:

共同点:

A.生存期存在于整个源程序,也即:只定义一次,直到程序结束后才释放;

B.当我们没有对他们做初始化时,他们可以被系统自动初始化,一般为0;

C.都只能在定义他们的源文件中使用,不能被其他源文件使用;

不同点:作用域不同,前者:只能在函数体或语句体中使用

后者:仅在定义他的源文件中使用

注:static全局变量与普通全局变量的区别:

全局变量未加声明的话,默认为非static的,它可以被其他源文件所引用(引用方式为:extern var_type var_name)

static全局变量不能被其它源文件引用;



2.static函数:

一般程序中有两种类型的函数:内部函数和外部函数

内部函数也即static函数,外部函数也即加上extern声明的(未加任何声明的也默认为外部函数)

区别是:前者只能在定义它的源文件中被调用,后者可以在其它源文件中被引用(引用方式同普通全局变量的调用方式:extern ret_type func_name(para_type1, para_type2, ............);



二. C++中的延伸

static数据成员和static成员函数的异同点:

共同点:

1)两者都只和类相关联,他们独立于该类的任何对象而存在;

2)static关键字只出现在类定义体中的声明处,在类外对他们进行定义时不用再加上static;

不同点:

1)static数据成员只能在类定义体外部定义,此外它不能通过类构造函数进行初始化,只能在定义时初始化;

例外:对于整型const static数据成员,只要其初始化式是常量表达式就可以在类定义中初始化;

2)static成员函数可以在类定义体内或外定义;

此外,static成员函数没有this指针,也不能被指定为const,因为:this指针是用来指向调用该函数的对象的,而static成员函数仅与类相关联,何来调用它的对象呢?调用static成员函数需要加上类作用域符,以指明它是哪个类的。同样地,将成员函数声明为const型的就是承诺不会修改该函数所属的对象,而static成员函数根本就和对象没有关系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: