首先,先说一说static的作用
1、函数体内的static变量,作用域为函数体内,该变量的内存只被分配一次,在函数调用结束后并不会销毁,在下次调用时任然维持上次变量的值
2、在模块内的static变量可以被模块内的所有函数访问,但不能被模块外的函数访问
3、在模块内的static函数只可以被模块内的函数调用,不能被模块外的其它函数调用
4、在类中声明的static成员变量属于整个类所有,对于类的对象它只存在一份,在类中声明,在类外定义
5、在类中的static函数属于整个类拥有,这个函数不接受this指针,它只能访问类中的static成员变量
const关键字的作用
1、const关键字修饰一个普通变量时,准确的说它修饰的是只读变量,想要阻止一个变量在使用的过程中被改变那么就把它声明为const,在定义const变量时,要对它进行初始化,否则编译器会报错。
声明方式有两种:例如:const int a = 3; int const a = 3;意思相同,const放在int关键字前和后都是一个意思。但是对于指针就不一样了。
2、const关键字修饰指针时,它可以修饰指针本身int* const p,这里可以看见const离p是最近的,表示它直接修饰于p,所以这是一个指针常量,指针是一个常量,它本身是一个常量,所以它本身不可以被修改(也就是它的指向不可以被修改),但是它指向的内容可以被修改;当然const也可以修饰指针所指向的变量const int* p,这里可以看出*和p的距离最近,*p一般表示的是p所指向的内容,所以const修饰的是*p,那么就表示p所指向的内容是不可以被修改的,但是p可以被修改,所以这是一个常量指针,修饰常量的指针;还有一种情况就是const都修饰,const int* const p,那么就表示它本身是一个常量,并且还指向一个常量。
常量指针:指向常量的指针
指针常量:这个指针是一个常量
const修饰指针的一个变形例子
typedef void* VP;
const VP p;
在这里VP是类型名字,它是一个整体。我们可能会将const VP p改写为const void* p;那么这里*和p就先结合了,那么void*就不再是一个整体了,所以我们要做有个小小的变形,因为有const int a和int const a是等价的,那么这里const VP p就和VP const p是等价的,那么就相当于是void* const p,这里void*仍然是一个整体,没有分开。这里考察的一点也是把define和typedef区分开来。
3、在一个函数中,const可以修饰形式参数,表示这些参数在这个函数体内是以只读出现的,不能在函数中改变它的值。
4、const修饰函数的返回类型,当需要返回的值是不可以被修改的时候,就是它不可以做左值,那么可以用const函数修返回类型
5、当const出现在成员函数的最后时,例如:void setValue()const;表示这个函数是一个常量成员函数,在函数体内不可以修改成员变量的值