一、指针类型
指针指向一个地址,该地址存储着一变量值。根据指针所指向的地址、该地址的值的固定与否,将指针分为“指针常量”、“常指针”与“指向常量的常指针”。
1. 指针常量:int * const p
从字面意思可以看出,指针是一个常量,也就是地址不能被修改,特点是指针指向的数值可以改变,然而指针所保存的地址却不可以改变。
2. 常指针:const int * p
特点是指针所保存的地址可以改变,然而指针所指向的值却不可以改变。同理,当添加*p = a时,会发生编译错误。
3. 指向常量的常指针:const int const * p
特点是指针所保存的地址不可变,指针所指向的数值也不可变。
二、野指针
野指针指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为 NULL避免,而只能通过养成良好的编程习惯来尽力减少。其成因有:指针未初始化,指针释放后未置空,指针操作超越变量作用域。所以,在声明指针时要进行初始化(置NULL),释放完内存后对指针进行置空。详细参阅野指针。
三、const成员函数(类内)
类的成员函数在声明时,会有在成员函数的参数列表后加const进行修饰的情况,称为const成员函数,这个const指明了这个函数不会修改该类的任何成员数据的值,称为常量成员函数。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调 用。详细参考C++中的const成员函数(函数声明后加const,或称常量成员函数)用法详解。
事实上,我们都知道在调用成员函数的时候编译器会将对象自身的地址作为隐藏参数传递给函数,在const成员函数中,既不能改变this所指向的对象,也不能改变this所保存的地址,this的类型是一个指向const类型对象(常对象)的const指针。
四、const加在函数声明前后的区别
const加在函数声明前,表示返回值是个常量,加在后面表示const成员函数。
参考资料: