static关键字总结
static&const思维导图
* static修饰局部变量
函数内的static变量的作用范围在该函数内,该变量只在内存中初始化一次,下次使用时依然维持以前的值,不再进行初始化的工作。因为static变量保存在全局数据区,而不是栈区,保持到下一次使用时依然有效。由于其保存在全局数据区,所以它的有效范围在局部函数内,但是生命周期却伴随着整个进程的生
命周期的结束。- static修饰全局变量
静态全局变量表明这个变量是该文件级别的,对于其他文件是不可见的,在其他文件可以定义同名变量,并且不能用extern声明为外部变量。
- static修饰函数
1) 其他文件中可以定义相同名字的函数,不会发生冲突。
2) 静态函数不能被其他文件所用。是本文件级别的。
- static修饰成员变量
对于多个实例化的对象,共享该静态成员变量,所有的对象都可以访问到这个成员。
静态数据成员的值是可以更新的,更新一次,所以对象都可以共享,效率比较高。
- static修饰成员函数
1)出现在类体外的函数定义不能指定关键字static
2)静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
3)非静态成员函数可以任意地访问静态成员函数和静态数据成员;
4)静态成员函数不能访问非静态成员函数和非静态数据成员;
静态方法加载的时候,对象还没有成立,同时静态方法也不能有this指针。
5)由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;
tips:
- 静态成员是属于类的,随着类的加载而加载的,是先于对象成立的。
- 生命周期也比对象要长一些。
const关键字总结
const修饰变量 表示“只读” 在定义这个变量的时候要初始化,之后没有机会改变这个值了
const修饰指针,代表指针本身不能改变,地址不能变
const修饰形参,代表这是一个输入型参数,在函数内部是不可以被改变的
const修饰类成员函数,代表这个函数是一个常函数,不会更改成员变量的值,此时的const实际上修饰的是this指针,这块空间的内容是不可以更改 的。
某些时候用来修饰类成员的返回值类型,使得其返回值不为”左值”
const的作用
为给读你代码的人传达非常有用的信息,声明一个参数为常量是为了告诉用户这个参数的应用目的
通过给优化器一些附加信息,使关键字const也许能产生更紧凑的代码
合理使用关键字const可以使编译器很自然的保护那些不希望被修改的参数,防止无意的代码修改,可以减少bug的出现