static、extern、const、volatile关键字?
static:static的意思是静态的,可以用来修饰变量,函数和类成员。
局部变量:被static修饰的局部变量就是,它会在程序运行过程中,并且值不变。
全局变量:被static修饰的全局变量函数只能在本文件中使用,不能被其他文件调用。
**函数:被static修饰的函数就是静态函数,静态函数只能在本文件中使用,不能被其他文件调用,也不会和其他文件中的同名函数冲突。
类:而在类中,被static修饰的成员变量是类静态成员,这个静态成员会被类的多个对象共用。被static修饰的成员函数也属于静态成员,不是属于某个对象的,访问这个静态函数不需要引用对象名,而是通过引用类名来访问。
【note】静态成员函数要访问非静态成员时,要用过对象来引用。局部静态变量在函数调用结束后也不会被回收,会一直在程序内存中,直到该函数再次被调用,它的值还是保持上一次调用结束后的值。
注意和const的区别。const强调值不能被修改,而static强调唯一的拷贝,对所有类的对象都共用。
extern
在当前文件使用extern 类型 变量名/函数名就可以使用另一个文件中定义的全局变量或者函数。不用再分配内存。
const
(1)const常量,修饰的常量不能变。
(2)const指针, 指针常量int *const p (指针指向的地址不能变,但是可以修改指向值)和常量指针const int *p(指针指向的值不能变,但可以指向别的指针),谁在前谁不能变。
(3) const函数,有三个位置 const int add(const &a , const &b)const
修饰形参:形参不能变
修饰函数:返回值不能变
在最后:不能修改成员变量
(4)const对象 const point p
const对象只能调用const成员函数,不能调用普通成员函数
普通成员函数两个都可以调用
volatile
有时候程序编译时,编译器会对程序做优化,volatile的意思是“脆弱的”,表明它修饰的变量的值十分容易被改变,所以编译器就不会对这个变量进行优化(CPU的优化是让该变量存放到CPU寄存器而不是内存),进而提供稳定的访问。每次读取volatile的变量时,系统总是会从内存中读取这个变量,并且将它的值立刻保存。