限定符const用法详解

**本文涉及指针和引用的概念,对此仍有困惑的小伙伴儿请移步上一篇文章:[[引用与指针的本质]]。**

# 限定符const
Qualifier

**作用**:表示被限定的对象一旦确定,就不能被修改。**因此,被限定的对象必须初始化!**

# const与引用

1. 对常量的引用,常称作常量引用


```
const int b=15;
const  int &p2=b;//p2是对整型常量b的引用
```

2. 
一般情况下,**引用的类型必须与绑定的变量的类型保持一致**,只有两种特殊情况:
3.1. 拥有特权的const:const引用可以绑定非const变量,因为**非常量->常量**,反之不成立
(但是,两者必须为同一类型的变量,否则,编译器将在类型转换的过程中创建临时变量,就无法通过修改p2来控制b,而是控制临时变量)

```
int a=10;
const int &p1=a;

//实际上会发生
//int a=10;
//const int temp=a;//a发生类型转换
//const int &p1=temp;
```

正确 


```
double b=20;
const int &p2=b;

//实际上会发生
//double b=20.15;
//const int temp=b;//temp=20;
//const int &p2=temp;
```

 错误:使用p2时,实际上是在使用temp,而不是b

3.2. (未完待续。。。)


# const与指针

*用法与引用完全相同*

1. 指向常量的指针,常称作常量指针

```
const int b=15;
const  int *p2=b;//p2指向整型常量b

```

**指针指向的对象b不可以改变,但指针p2本身可以变**

```
int c=30;
*p2=c;//错误
p2
```


2. 

```
const int a=10;
const int *const pi=a;
```

对于复合型,判断变量最好的方法就是**从右往左看**,离变量最近的说明了变量的性质----pi左边是const,说明pi是一个const对象,* 说明pi是一个常量指针,而const int 说明常量指针pi指向的对象是const int 类型的变量,即整型变量。

3. 
一般情况下,**指针的类型必须与所指向的变量的类型保持一致**,只有两种特殊情况:
3.1. 拥有特权的const:常量指针可以指向非const变量,因为**非常量->常量**,反之不成立
(但是,两者必须为同一类型的变量,否则,编译器将在类型转换的过程中创建临时变量,就无法通过修改p2来控制b,而是控制临时变量)

```
int a=10;
const int *p1=a;

//实际上会发生
//int a=10;
//const int temp=a;//a发生类型转换
//const int *p1=temp;
```

正确 


```
double b=20;
const int *p2=b;

//实际上会发生
//double b=20.15;
//const int temp=b;//temp=20;
//const int *p2=temp;
```

错误:使用p2时,实际上是在使用temp,而不是b

3.2. (未完待续。。。)


# constexpr表达式

作用:声明表达式的值不能被修改

要求:表达式的结果在编译时就能确定

**一般用在函数体外,因为函数体内变量的地址常常是不确定的。**

```
int b=20;
constexpr int  a=b+2;
```


```
constexpr  int * const p=15;

```


```
constexpr func();//func为确定的简单函数
```

---

今天的分享就到这儿啦,如果对你有帮助,希望可以动动小手,给博主点个不要钱的赞奥~

    如果有什么疑惑,也欢迎在文章下留言与博主一起讨论~
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值