一、const限定符
在C++中,当我们定义需要定义一种值不允许修改的变量时,就用到了const关键字,应用场景如表示缓冲区大小或者表示一个常量。
const修饰的对象具有以下特点。
1. const修饰的常量不可修改;
const int a=10; //定义const常量
a=11; //错误:不允许修改
2. const对象一旦创建必须初始化;
3. 对于const对象只能执行不改变其内容的操作;
const int a=40;
const int b=a; //正确:用a去初始化不会改变其值。
4. const对象仅在文件内有效,当多个文件(cpp文件)共享使用常量时,用到extern关键字;
对于const变量,在定义和声明时都添加extern关键字(定义一次,多处可用)
file.cpp定义并初始化一个常量,该常量能被其他文件访问:
extern const double PI = 3.14;//定义常量PI
file.h头文件进行声明
extern const double PI;//后续只要添加#include<file.h>的cpp文件都可使用PI
二、const引用
1.把引用绑定到const对象上称为常量引用。不能通过常量引用修改所绑定的对象。
2.引用与绑定的类型要一致,但有两个特例:
(1)常量引用可绑定到非常量对象
int i=1;
const int &r=i; //正确:允许常量引用绑定非常量对象
(2)非常量引用不能绑定到常量对象
const int c=1024;
int &r=c; //错误:非常量引用不能绑定常量对象
三、const指针
1.常量对象只能用常量指针(前后类型一致)
const double PI=3.14;
double *ptr=PI;//错误:ptr是一个普通指针
const double *ptr1=PI;//正确
2.常量指针必须初始化,且初始化完成不能在改变指向,但可以修改值
为了便于理解,举例如下:
int a=0;
int *const p=&a;//常量指针p将一直指向a,不能修改其指向,但a的值可以修改
const double PI=3.14;
const double *const ptr=&PI;//ptr自己的指向以及PI的值都不允许修改
如何读懂一条包含多个符号语句?例如
const double *const ptr=&PI;
中的ptr怎么理解?
方法是从右向左读:1.从右向左,离变量名
ptr
最近的符号是const
,因此ptr
首先是一个常量对象,该对象类型由其余部分决定;
2.继续向右读,下一个符号是*
指针,表明ptr
是一个常量指针;
3.下一个符号是double
,表明ptr
是一个指向双精度浮点型的常量指针;
4.最后是const
,因此ptr
是一个常量指针,它指向的是双精度浮点型常量,即ptr是一个指向 双精度浮点型常量的常量指针;