const 相关知识 const和指针、const和引用

以前老是对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 }
原文地址:https://www.cnblogs.com/Hwangzhiyoung/p/8595883.html