一. 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成员函数根本就和对象没有关系。