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;

 

posted @ 2020-08-20 13:53  kuaqi  阅读(237)  评论(0编辑  收藏  举报