可以理解为顶层相当于“公司领导”,底层相当于“员工”。赋值可以看出命令,领导当然不能命令领导等同于顶层const不能赋值给顶层const;领导可以命令员工和非领导,而员工是最底层,所以相互之间是可以命令的。
int j = 1;
const int i = 2; // 顶层const
int *const p1 = &j; //顶层const
const int *p2 = &i; //底层const
对于指针可以理解为在*左边为底层const,右边为顶层const
而 const int *const p3 = &i; //即为底层const,又为顶层const
p1 = p2; // 错误:底层const不能赋值给顶层const
p3 = p1; //正确:p3即为顶层又为底层,不影响
总结:用顶层const表示指针是个常量,用底层const表示指针所指的对象使一个常量。