• 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进行强制类型转换;
    青青园中葵,朝露待日晞。 阳春布德泽,万物生光辉。 常恐秋节至,焜黄华叶衰。 百川东到海,何时复西归? 少壮不努力,老大徒伤悲!
  • 相关阅读:
    C#中Post和Get提交
    C#实现动态页面静态化
    瀑布流的实现
    jQuery常用方法验证
    eclipse配置PHP开发环境
    数据结构学习
    机器学习实战
    Leetcode_StringToInteger
    网络学习
    leetcode_前期心得
  • 原文地址:https://www.cnblogs.com/weiyouqing/p/14580265.html
Copyright © 2020-2023  润新知