C++朝花夕拾:const 指针与指向const的指针
一、关于const的注意点
const int * pOne; //指向常量的指针,它指向的值不能修改,指针可以指向别处.
int * const pTwo; //指向整形的常量指针 ,它不能在指向别的变量,但指向(变量)的值可以修改。
const int *const pThree; //指向整形常量 的常量指针 。它既不能再指向别的常量,指向的值也不能修改。
以*为分割点,查看关键字const右边来确定什么被声明为常量
二、关于const修饰对象和函数
class Rectangle
{
pubilc:
void SetLength(int length){itslength = length;}
int GetLength() const {return itslength;} //成员函数声明为常量
private:
int itslength;
int itswidth;
};
Rectangle* pRect = new Rectangle;
const Rectangle * pConstRect = new Rectangle;
//指向const对象
// pConstRect是指向const对象的指针,它只能使用声明为const的成员函数,如GetLength()。
Rectangle* const pConstPtr = new Rectangle;
当成员函数被声明为const时,如果试图修改对象的数据,编译器将视为错误。
如果声明了一个指向const对象的指针,则通过该指针只能调用const方法(成员函数)。
三、总结
关于Const函数的几点规则:
a. const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数.
b. const对象的成员是不可修改的,然而const对象通过指针维护的对象却是可以修改的.
c. const成员函数不可以修改对象的数据,不管对象是否具有const性质.它在编译时,以是否修改成员数据为依据,进行检查.
d. 然而加上mutable修饰符的数据成员,对于任何情况下通过任何手段都可修改,自然此时的const成员函数是可以修改它的