1、staic关键字
凡是用static关键字声明或者定义的变量和函数,均存储在静态存储区,其生存期都是伴随着程序结束而结束。
静态局部变量: 与普通局部变量相比,作用域一样,存储区域不一样(由堆栈变为静态存储区),生存期不一样。
静态全局变量: 与一般全局变量相比,存储区一样,生存期一样,作用域变小了(由整个程序到包含其的cpp文件)。
静态 函数: 与一般全局变量相比,存储区一样,生存期一样,作用域变小了(由整个工程到包含其的cpp文件)。
类的静态成员变量:它为类的所有对象所共有,在没有产生类对象时其作用域就可见,在没有产生类的实例时,我们就可以操作它;静态数据成员定义时要分配空间,所以不能在类声明中定义。
类的静态成员函数:它为类的全部服务而不是为某一个类的具体对象服务,静态成员函数由于不是与任何的对象相联系,因此它不具有this指针,不能够访问类的非静态成员。
2、const关键字
作用:定义常量,修饰函数的参数和返回值
3、define关键字
c语言中的宏定义,在编译时只是进行简单的文本替换,而不进行数据类型安全检查
4、inline关键字
好处:避免函数的调用,而是直接将函数代码copy到调用的地方
坏处:增加代码的体积,增加内存负荷,影响程序运行速度
一般将需要多次调用并且代码只有10行以内的函数定义为inline函数。
5、register变量
将(频繁使用的)局部变量的值从内存中放到寄存器(静态局部变量不能定义为register变量)
6、extern变量(与static正好相反,它的作用域为整个工程)
extern int i; i = 0;在全局区域时表示定义一个变量,在局部时表示引进外部变量,并给其赋值(赋值语句不应该出现在函数块之外)
extern用于定义一个变量:extern int i = 0;
7、一个类的例子
class Test
{
public:
Test(): a(0){}
enum {size1=100, size2 = 200 };
private:
const int a; // 只能在构造函数初始化列表中初始化,不能在构造函数体里面进行初始化
static int b;
const static int c = 0; //可以在这里定义
};
int Test::b = 0; // 不能以成员列表初始化,不能在定义处初始化,因为不属于某个对象,只能在外部初始化。
//const int Test::c = 0; //注意:给静态成员常量赋值时,不在需要加static修饰。但const要加。