顶层const与底层const
const用来表示常量,不可修改,在C++中,又细分了顶层const与底层const,起初接触C++,会一时不知如何区分顶层const与底层const。
下面是一个分辨顶层const与底层const的较实用办法:
1、与指针(*)和引用(&)无关的const全部都是顶层const
2、声明引用的const都是底层const
3、声明指针的const是最复杂的,定性说:在数据类型前的const是顶层const,在指针符号(*)与变量名称之间的const是底层const。下面举一例说明。
const int *const p
上面定义了一个整型数据,其中靠前的const在数据类型int之前,所以是底层const,在变量名称p之前的const则是顶层const。
顶层const与底层const区别
顶层const与底层const的区别主要在执行对象拷贝,也就是给它们所生命的对象进行赋值时有区别。
其中顶层const赋值时没有影响,其所赋值的对象类型也不会影响到顶层const声明的对象。
但是,底层const就要求赋值对象与底层const声明的变量必须具有相同的底层const资格,也就是说只有底层const修饰的变量值才可以给底层const修饰的对象赋值拷贝,否则就是错误的。
注:其中const修饰的引用类型在初始化时允许任意表达式作为初始值。