C++ const限定符相关知识小结

不羁岁月 提交于 2020-03-05 22:07:05

疫情所迫,希望用这种方法督促自己坚持学习。同时记录在找工作过程中的艰辛不易。博客内容持续增减修改,都为摘录和个人理解。欢迎各位批评指正其中错误,相互勉励,共同进步。

一、const 定义和初始化

在代码中,我们希望有些变量为常值,不能为其赋值,例如为某个数据分配固定大小的内存,这时就要用到const限定符。其常见的定义和初始化方式如下:

int i = 10;          
const int j = i;      //为int型常量赋给i的值
const int k = 10;     //为int型常量赋值10
const int s;          //错误,常量类型必须有初始化值
k = 100;              //错误,常量类型值不能修改

值得注意的是,在默认情况下,const类型仅在当前文件中有效,不能被其他文件调用。如果需要被其他文件调用,则无论在声明还是定义时都需要加入关键字 “extern”。

//在头文件中声明
extern const int size;
//在其他文件调用并初始化
extern const int size = get_size();

因此,如果想在多个文件中共享const变量,就必须加上关键字“extern”

二、const的引用

把引用绑定到const对象上,称之为对常量的引用。因此常量引用不能用来修改其绑定的const对象的值。

const int a = 10;      //定义int型常量a
const int &b = a;      //b为a的引用
int c = a;             //错误,用非常量引用来引用一个常量值
b = 100;               //错误,不能通过引用来改变常量的值

const 的引用,可以引用一个非const的对象

int a = 10;                          
const int &b = a;                    //常量引用b引用非常量对象a
cout << a << " " << b << endl;       //输出为10 10
a = 100;                             
cout << a << " " << b << endl;       //输出为100 100 
b = 20;                              //错误, 常量引用不能修改其中的值

三、const和指针

首先,我们需要区分两个定义。一是指向常量的指针,另外一个是常量指针

//下面是指向常量的指针的一段示例代码
const int num = 10;      
const int *p1 = &num;      //指向常量的指针
int *p2 = &num;            //错误,不能用普通指针指向一个常量
*p1 = 100;                 //错误,不能改变常量指针指向对象的值

常量指针表示所存储的指向对象的地址不能改变,而所指向对象的值在非常量的情况下是可以改变的。

double pi = 3.14;
double *const p1 = &pi;
const double *const p2 = &pi;
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!