练习2.30
const int v2 = 0; //顶层const;
int v1 = v2; //整型变量,不是const
int *p1 = &v1, &r1 = v1; //不是const
const int *p2 = &v1, *const p3 = &i , &r2 = v2; //p2是底层const, p3既是顶层const,也是底层const, r2是顶层const(用于声明引用的const都是顶层const)。
练习2.31
r1 = v2; //合法,但两者都不是const,只是普通的引用和赋值。
p1 = p2; //不合法,p2包含底层const的定义,而p1没有
p2 = p1; //允许一个指向常量的指针指向一个非常量对象。
p1 = p3; // 不合法,p3包含底层const的定义,而p1没有。
p2 = p3; // 合法,这两个指针都是底层const