const 限定符:const指针、const引用
1、C/C++ 中关于以下三种定义:
const char *ptr; 不可以通过该指针改变指向内容;可以指向别的内容;
char const *ptr; 同上;
char* const ptr; 指针指向固定;指向内容可以改变;
const char* const ptr;
二、const变量相互转换
1、基础概念说明
(1)常量指针:顶层const
指向常量的指针:底层const
2、拷贝操作
(1)顶层const:拷贝赋值操作并不会改变被拷贝对象的值,因此是否是常量没有关系;
int i = 0; const int ci = 10; i = ci;
(2)底层const:拷贝操作的拷入和拷入对象必须有相同的底层const,或者两个对象的数据结构可以相互转换(int* -> const int* )
const int ci = 10; int *p1 = &ci; //错误 (typeid(&ci).name() -> const int * )
const int * const p2= &ci;
const int *p3 = p2; //正确,跟顶层const无关
3、引用绑定
(1)引用类型必须与其所引用对象的类型一致;
(2)表达式的类型能转换成引用类型即可;
int i = 42; const int &r1 = i; //将const int & 绑定到普通int对象上;
double dval = 3.14; const int &c1 = dval; //正确,会绑定到临时量 int &c2 = dval; //错误、绑定到临时量无意义 // c1会绑定到临时对象上 =>等同于 double dval = 3.14; const int temp = dval; //生成一个临时int变量 const int &c1 = temp;