C++的顶层底层const

顶层const表示指针本身是个常量,底层const表示指针所指的对象是常量。其比较绕的地方是顶层const和底层const之间的拷贝(赋值)关系

 1 void testConst2() {
 2 
 3     int i = 0;
 4     int* const p1 = &i;            //顶层const
 5     const int ci = 42;            //顶层const
 6     const int* p2 = &ci;        //底层const
 7     const int* const p3 = p2;    //底层const且也是顶层const
 8     const int& r = ci;            //底层const
 9 
10     int* p;
11     p = p1;                        //顶层const一般可进行拷贝操作
12     //p = p3;                    底层const在进行拷贝操作时会有限制,此处错误
13     //p = p2;                    非常量可以转换成常量,但反之不行,此处错误
14     p2 = p3;                    //把p3当做底层const,才可进行底层const给底层const的拷贝
15 
16 }

底层const不能拷贝给顶层const,因为顶层const本身不能修改。

顶层const拷贝给底层const时,一般没有问题

还有一种就是底层const拷贝给底层const,当然了顶层const不能拷贝给顶层const

在12行的代码中,p3作为顶层const拷贝给p没有任何问题,但p指向的是非常量整型,那么可以通过*p来修改p指针所指向地址中的内容,此时p指针的地址和p3指针的地址相同,p3也是底层const,不允许修改其指向地址中的内容,就会发生冲突,所以编译器会直接报错

posted @ 2021-12-12 11:05  捞的不谈  阅读(51)  评论(0编辑  收藏  举报