1. const 用于变量
(1) const位于*左侧,修饰变量,指针所指内容为常量,不允许通过这个指针对内容进行更改,但是a可以指向别处,也可以不通过a改变对象的值。
int b = 500, c = 600;
const int* a = &b;
int const *a = &b;
*a = 600;//错误
a = &c;//正确,指向别处
b = 600;//正确,没有通过a来改变
(2)const位于*右侧,修饰指针,指针为常指针,定义时必须初始化,且其值不能改变,指针所指内容通常不是常量,可以更改。
int* const a ; //错误
int* const a = &b;//正确,定义时必须初始化
cout<< a++ << endl; // 错误,不能改变指针的值
*a = 600; //正确,允许改值
2. const用于类
(1)const修饰成员变量
const修饰类的成员变量,表示成员常量,不能被修改,同时它只能在初始化列表中赋值。
class A
{
…
const int nValue; //成员常量不能被修改
…
A(int x): nValue(x) { } ; //只能在初始化列表中赋值
}
(2)const修饰成员函数
const修饰类的成员函数,则该成员函数不能修改类中任何非const成员变量(可以进行读操作,比如返回一个值),也不能调用那些会修改成员变量的普通成员函数(只能调用Const成员函数)。
一般写在函数的最后来修饰。
class A
{
…
void function()const; //常成员函数, 它不改变对象的成员变量,也不能调用类中任何非const成员函数。
}
对于const类对象/指针/引用,只能调用类的const成员函数,因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。通常会把一个只读函数定义为const类型,提高程序健壮性。
a. const成员函数不被允许修改它所在对象的任何一个数据成员。
b. const成员函数能够访问对象的const成员,而其他成员函数不可以。
(3)const修饰类对象/对象指针/对象引用
a. const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。
b. const修饰的对象,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数会有修改成员变量的企图。
例如:
class AAA
{
void func1();
void func2() const;
}
const AAA aObj;
aObj.func1(); ×
aObj.func2(); 正确
const AAA* aObj = new AAA();
aObj-> func1(); ×
aObj-> func2(); 正确