c++中的顶层const和底层const

什么是顶层和底层const:

1. 顶层const:指const定义的变量本身是一个常量;

2. 底层const:指const定义的变量所指向的对象是一个常量;

const int i = 0;      //顶层const,变量i就是常量;
const int  * a =  &i;    //底层const, a所指向的对象*a是常量;
int * const b = &i;    //顶层const, 变量b本身就是一个常量;

区分后有什么作用:

1. 对于函数重载,编译器在区分重载函数时会自动屏蔽顶层const;

   void testfunc(int* a)
    {
        cout << "this is int* a" << endl;
    }
    void testfunc(const int* a)
    {
        cout << "this is const int* a" << endl;
    }

    void testfunc(int* const a)
    {
        cout << "this is const int* a" << endl;
    }

 

2.底层const变量不能赋值给非底层const的变量 

int zz = 99;
const int *xp = &zz;
//*xp = 88; //错误,*xp定义为const,不能被修改; //int * const xpp = xp; //错误, xp为底层const,不能赋值给非底层的const变量,即底层const变量只能赋值给底层的const变量; const int * cap = xp; //正确,cap为底层const,xp也有底层const;

 3.const_cast强制类型转换函数,只能改变底层const变量的const属性;

const int zz = 99;
const int *xp = &zz;
int *ptr = const_cast<int*>(xp);//正确,底层cosnt变量能够使用const_cast进行类型转换
*ptr = 66;
const int ca = 100;
//int bb = const_cast<int>(ca); //错误,ca为顶层const,无法使用cosnt_cast进行强制类型转换;

 

posted @ 2021-03-26 08:57  唯一诺  阅读(426)  评论(0编辑  收藏  举报