以前老是对const概念不清不楚,今天算是好好做个笔记总结一下。以下内容包括1)常量指针(指针本身是常量),2)指针常量(指针指向的是常量对象),3)常量引用,4)const成员函数。
常量指针,指针是一个常量,常量指针必须初始化,而初始化一旦完成,也就是存放在指针中那个地址不能再改变了。
指针常量,意思是指针指向的是一个常量对象。
int *const curErr;从右往左读,const curErr是一个常量对象,*const curErr 是一个常量指针,int *const curErr 解释:常量指针指向i的是一个int型对象。
1)常量指针想要改变其指向的对象是会报错的!
常量指针示例:
2)指针常量想改变指向对象的值时会对指针进行解引用,而这一过程相当于对常量对象做赋值操作,会报错!
指针常量示例:
3)const的引用
与普通引用不同的是,对常量的引用不能被用作修改它所绑定的对象。
注:对const的引用我们一般称为常量引用,但请记住,引用不是对象。
对常量引用和指针常量做一个比较和总结:
指针常量和常量引用一样,指向常量的指针也没有规定其所指的对象必须是一个常量。所谓指向常量的指针仅仅要求不能通过该指针改变对象的值,而没有规定那个对象的值不能通过其它途径改变。
4)const成员函数
const在类成员函数中还有种特殊的用法,把const关键字放在函数的参数表和函数体之间,称为const成员函数,其特点有二:
1)只能读取类数据成员,而不能修改之。
2)只能调用const成员函数,不能调用非const成员函数。
1 #include <iostream> 2 using namespace std; 3 4 class point 5 { 6 int x; //默认为private的数据成员x和y 7 int y; 8 9 public: 10 point(int xp = 0, int yp = 0) //构造函数 11 { 12 x = xp; 13 y = yp; 14 } 15 16 void print() const //const成员函数内无法修改数据成员,否则编译器报错 17 { 18 x = 5; //1. 试图修改x将引发编译器报错 19 set(); //2. 试图调用非const函数将引发编译器报错 20 cout << "x: " << x << " ,y: " << y << endl; 21 } 22 23 void set() //将set()定义成const函数就能解决问题 24 { 25 } 26 }; 27 28 int main() 29 { 30 point pt; //声明类对象,以缺省参数形式调用构造函数 31 pt.print(); //调用const成员函数 32 33 return 0; 34 }