**本文涉及指针和引用的概念,对此仍有困惑的小伙伴儿请移步上一篇文章:[[引用与指针的本质]]。**
# 限定符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为确定的简单函数
```
---
今天的分享就到这儿啦,如果对你有帮助,希望可以动动小手,给博主点个不要钱的赞奥~
如果有什么疑惑,也欢迎在文章下留言与博主一起讨论~