关键字static的意思是静态,有3个明显作用:
1)在函数体内,静态变量具有"记忆"功能。即在函数被调用过程中,一个被声明为静态变量的值维持不变。
static局部变量和普通局部变量的区别:static局部变量只被初始化一次,下一次的运算依据上一次的结果值。
2)在模块内,但在函数体外,它的作用域范围是有限制的。static类型的变量,是本地的全局变量。所以,可以被模块内的所有函数访问,不可以被模块外的函数访问。
static类型的函数,与普通类型函数的作用域不一样。静态函数的作用域仅在本文件中,只可被模块内的其它函数调用,不能被模块外的其它函数调用。
3)与类有关的static:
static数据成员特点:
(1)对于非静态数据成员,每个类对象都有自己的复制品;而静态数据成员被当做类的成员。无论有多少个对象,静态数据成员只有一个复制品,由类的所有对象共享访问。
(2)static数据成员存储在全局数据区。定义时要分配内存空间,所以不能在类声明中定义。由于类的所有对象共享,不属于特定的类对象,所以,没有产生类对象时,其作用于可见。
(3)和普通数据成员一样,遵从public,private,protected访问规则。
(4)必须初始化;static成员变量的初始化是在类外。初始化时不带上static的关键字。private、protected的static成员虽然可以在类外初始化,但是不能在类外被访问。
static成员函数特点:
静态成员函数是类的内部实现,属于类定义的一部分。普通成员函数一般隐含this指针,指向类的对象本身,因为普通成员函数总是具体的属于某个类的具体对象,所以this是默认的。而静态成员函数由于不是与任何对象相联系,因此不具有this指针。从这个意义讲,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,只能调用静态数据成员和静态成员函数。