const指针的定义:
const指针是指针变量的值一经初始化,就不可以改变指向,初始化是必要的。其定义形式如下:type *const 指针名称;
声明指针时,可以在类型前或后使用关键字const,也可在两个位置都使用。例如,下面都是合法的声明,但是含义大不同:
const int * pOne; //指向整形常量 的指针,它指向的值不能修改
int * const pTwo; //指向整形的常量指针 ,它不能在指向别的变量,但指向(变量)的值可以修改。
const int *const pThree; //指向整形常量 的常量指针 。它既不能再指向别的常量,指向的值也不能修改。
理解这些声明的技巧在于,查看关键字const右边来确定什么被声明为常量 ,如果该关键字的右边是类型,则值是常量;如果关键字的右边是指针变量,则指针本身是常量。
函数后面加const
编译器会自动给每一个函数加一个this指针。在一个类的函数后面加上const后,就表明这个函数是不能改变类的成员变量的(加了mutable修饰的除外,后面有讲)。实际上,也就是对这个this指针加上了const修饰。任何不会修改数据成员的函数都应该声明为const类型。
#include <iostream>
using namespace std;
class CTest
{
public:
void show() const
{
cout << "const" << endl;
}
void show()
{
cout << "normal" << endl;
}
};
int main()
{
CTest a;
a.show();
const CTest b;
b.show();
system("pause");
return 0;
}
显示结果:normal
const
a对象将调用普通show(),b对象将调用show() const。
如果注释掉 void show() const 该成员函数,b.show()将报错。
如果注释掉void show(),程序可以正常运行,因为a.show()调用时,会将其this指针上加const
关于Const函数的几点规则: a.const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数. b.const对象的成员是不可修改的,然而const对象通过指针维护的对象却是可以修改的. c.const成员函数不可以修改对象的数据,不管对象是否具有const性质.它在编译时,以是否修改成员数据为依据,进行检查. e.然而加上mutable修饰符的数据成员,对于任何情况下通过任何手段都可修改,自然此时的const成员函数是可以修改它的
3用const修饰函数的返回值 如果给以“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const修饰的同类型指针。例如函数 constchar * GetString(void); 如下语句将出现编译错误: char*str = GetString(); 正确的用法是 constchar *str =GetString();