由于C++ Primer关于const的描述逻辑有些混乱,故总结一下
一、判断原则
- 首先将const分为顶层const和底层const。顶层const限定的是当前变量(基本类型、指针)是个常量;底层const(引用、指针)限定其所引用(指向)的对象是个常量
①注意括号内容,指针既可为顶层也可为底层,引用只能是底层,基本类型(算术、字符)只能是顶层 ②注意常量的地址属于底层const ③const限定指针时,const在基本类型右边为顶层const,在左边为底层const - 顶层const在初始化或拷贝时,若两边均为对象(引用不是对象),则无所谓两边是否为const
- 底层const要求左右两边均为const。若底层const为引用,右边可为字面值。(若底层const为指针,右边应为地址,如果是字面值,则无法确定所指向的对象是什么)
- 非常量可以转换成常量,反之则不行(借助临时量实现,本身不会改变)
二、实例
根据判断原则,从上到下,进行判断
int i = 42;
const int ci = i;
int j = ci;
const int ca = 1024;
const int &r1 = ca;
r1 = 42;
int &r2 = ca;
int a = 42;
const int &ra = a;
const int &rb = 42;
const int &rc = ra * 2
int &rd = ra * 2
ra = 0;
const double pi = 3.14;
double *ptr = π
const double *cptr = &pi
*cptr = 42;
int b = 0;
int *const p1 = &b;
const int pa = 42;
const int *p2 = &pa;
const int *const p3 = p2;
const int &r = pa;
b = pa;
p2 = p3;
int *p = p3;
p2 = &b;
int &x = pa;
const int &r2 = b;
参考
[1]《C++ Primer》(第5版)
|