static关键字
(1)函数体内的static变量,作用范围为该函数体,内存只被分配一次,其值在下次调用时仍然是上次的值。
(2)模块内的static全局变量,可被模块内所有函数访问,但不能被模块外的函数访问。
(3)模块内的static函数,可被模块内的其他函数调用,适用范围限定在声明它的模块内。
(4)类中的static成员变量, 属于类所有,对类的所有对象只有一份拷贝。
(5)类中的static成员函数,属于类所有,不接受this指针,只能访问类的static成员变量。类的静态成员,存在于任何对象之外,对象中不包含任何与静态数据成员有关的数据。通过作用于运算符直接访问。
class :: a;
const关键字
(1)欲阻止一个变量被改变,可使用const关键字。定义时进行初始化。
(2)对指针,可指定指针本身为const,表示指针中保存的地址不能被改变,这叫指针常量。可指定指针所指数据为const,表示不能通过指针来修改数据,这叫指向常量的指针,简称常量指针。二者也可同时指定为const。
int a;
int *p = &a;
const int *p1 = &a;
int * const p2 = &a;
const int * const p3 = &a;
//handle
*p++; //yes
*p1++; //error
p2++; //error
(3)函数声明中,const可以修饰形参,表示这是一个输入参数,函数内部不允许修改其值。而且也提高了函数灵活性。普通变量不能绑定到const变量上,反之可以。这样不管实参是const还是普通变量,都可以传给该形参。
p1 = p; //yes
p = p1; //error, const int * cannot to int *
(4)类中的成员函数,若为const类型,表明是一个常量函数,内部不能修改类的成员变量。常变量可调用常量方法不能调用普通方法,普通变量可以调用常量方法,也可以调用普通方法。都是this指针的原理,将在下一篇详述。
(5)类的成员函数,有时其返回值为const类型,以使得其返回值不为左值类型。