zoukankan      html  css  js  c++  java
  • 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进行强制类型转换;
    青青园中葵,朝露待日晞。 阳春布德泽,万物生光辉。 常恐秋节至,焜黄华叶衰。 百川东到海,何时复西归? 少壮不努力,老大徒伤悲!
  • 相关阅读:
    转载:山寨币凶猛
    Windows8.1 关机异常的解决
    Windows8、Windows8.1使用便签工具
    下载Sourceforge等国内无法下载站点文件的另一种方法
    专著出版成本计算
    PL2303 Windows8.1驱动
    转载:寒门再难出贵子
    华为荣耀品牌独立,子品牌战略能否实现新突破
    路由大战前夜,盘点智能路由的前世今生
    2020年实用工具推荐
  • 原文地址:https://www.cnblogs.com/weiyouqing/p/14580265.html
Copyright © 2011-2022 走看看