|
const与指针 const和指针会形成2种不同性质的组合形式:const修饰指针本身 与 const修饰指针指向的那个内存数据。在《C++ Primer》一书中作者使用顶层const和底层const这2个术语来描述这2种情况。前者就是所谓的顶层const,而后者就是底层const。下面用代码列举了这些情况: - int main(int argc, char *argv[])
- {
- int a = 1;
- const int*p1 = &a; //p1是底层const,通过p1不能改变p1指向的数据a。p1本身可变。
- int const*p2 = &a; //同上,p2是底层const,通过p2不能改变p2指向的数据a。p2本身可变。
-
- //--------------------
- int* const p3 = &a; //p3是顶层const,p3本身不能改变,始终指向a,但是通过p3可以改变a的值
-
- //--------------------
- const int* const p4 = &a; //顶层const和底层const的结合。p4本身是const,且通过p4无法改变它指向的数据a
- int const* const p5 = &a; //同上
-
- //--------------------
-
- typedef int* pint_t; //使用typedef将int*包装为一个简单类型 pint_t
-
- const pint_t p6 = &a; //const修饰p6,是顶层const
- pint_t const p7 = &a; //同上
-
- //------C++11中的using类型别名--------------
- using pchar_t = char*; //typedef包装类型别名的另一种替代方法
- char c = 'A';
- const pchar_t p8 = &c; //const修饰p8,是顶层const
- pchar_t const p9 = &c; //同上
-
- return 0;
- }
|