const、static关键字

最近一直在迷惑着这两个关键字,感受大脑里一片糊涂,特此整理一下: 函数

1、const 测试

一、数据常量,不能修改,必须初始化; this

1)非类的数据成员 spa

a、指向const对象的指针(remember) 设计

b、const指针(remember) 指针

2)做为类的数据成员 对象

a、必须在构造函数中进行初始化,而且必须在初始化列表中进行初始化; 生命周期

引伸:必须对任何const或引用类型成员以及没有默认构造函数的类类型的额任何成员使用初始化式; 作用域

二、const成员函数 rem

做为类的const成员函数,const关键字放在函数声明的后面,在函数定义时,也必须将const关键字放在函数的后面(对于static不是这样)。

1)设计const成员函数主要是不改变对象,正由于这样一个const成员函数不可能再声明为static,由于static加在成员函数上就代表该函数属于类而不属于类对象;

2)const成员函数能够被const对象或者非const对象调用,当被const对象调用时,函数中的this指针就变成了一个指向const对象的const指针(由于this指针本书就是一个const指针,它就是指向调用该函数的对象);

2、static

静态的;

一、对于对象进行修饰

1)对于全局变量加上static关键字后其存储位置没有变,仍是在全局存储区,可是缩小了其做用域,生命周期也没有变;

2)对于局部变量加上static关键字后,其存储位置发生改变,存在全局存储区,做用域没有变,生命周期变了;

3)对于类的数据成员(属于类),加上static关键字后,在类定义出进行声明,还必须在.cpp文件进行定义;对于static整型数据成员,能够在类定义时进行赋值,但还必须在.cpp文件进行定义;

2)对于函数进行修饰

1)static成员函数(属于类),在类定义处进行函数的声明,要加上static关键字,在.cpp文件处进行定义的时候static关键字不用再加了;

3、初始化

在这里又想说一下对象的初始化

对于具备类类型的对象,会调用其所属类的默认构造函数实现初始化。内置类型的对象的初始化依赖于对象如何定义。若是对象在全局做用域定义(即不在任何函数中)或定义为静态局部对象,则这些成员将被初始化为0。若是对象在局部做用域中定义,则这些对象没有初始化,除了给他们赋值之外,出于其余任何目的对未初始化成员的使用都是有问题的;

见本身的测试