C++探幽系列——指针、引用、const(二)

一、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是一个指向 双精度浮点型常量的常量指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值