zoukankan      html  css  js  c++  java
  • C++回顾day01---<const常量重点>

    一:定义常整型数 const int a;(或者int const a;)  不涉及指针

    不可改变值(也不可通过指针修改)

    二:定义一个指向常整型数的指针 const int* c;   可改指针指向,不可以该内存数据

    const用于修饰int* c---是一个具体内存,所以该内存数据是不允许修改的,但是c自身是一个指针,是可以被修改的

    不允许修改内存数据

    可以修改指针指向

    三:定义一个常指针 int * const d; 可改内存数据,不可改指针指向

    const是修饰d指针变量,则该指针变量指向不允许修改,但是可以修改内存中值
    c是一个指针变量,代表一个地址,这个地址不允许修改(通过直接修改或者二级指针都不行),但是可以修改其中内存中值

    不允许修改修饰的指针

    由于const并没有修饰内存,所以可以修改内存数据

    四:定义一个指向常整型的常指针const int* const e;  内存和指针都无法修改

     

    五:总结--用于在为外提供接口时,防止其他人修改数据。

    主要看const修饰的是指针,还是整个内存数据来进行识别
    const int* c              -----   const修饰整个内存数据,故不可修改内存数据,可以修改指针地址
    int * const d             -----   const修饰指针变量d,故不可修改指针变量的值(即指针地址),但是可以修改内存
    const int* const e        -----   const修饰整个内存数据和指针地址,都不允许修改

    六:补充--符号表《重点》

    问题抛出(一):

    问题抛出(二)

    存疑:这里可以认为符号表是针对局部const常量存在

    解决(一):什么是符号表?《重点》

    碰见const局部常量声明,将这个常量名:常量值放入符号表(不同于直接使用的内存)

    解决(二):为什么a值不变,而*p值改变了《重点》

     

    1.a指向符号表,依旧存在,故不变(编译过程中若发现使用常量则直接以符号表中的值进行替换
    2.编译过程若发现对const使用extern或者&操作符,则给对应的常量分配存储空间

    七:常对象和常函数(非重点)

    (一)常对象

    const 类名 对象名  或者  类名 const 对象名
    声明为常对象的同时必须被初始化,并且之后不能改写对象的数据成员

    (二)常函数:对函数功能有更明确的限定,例如只能输出,但不能进行修改

    常函数不能修改对象的数据成员
    常函数只能调用常成员变量和其他常函数
    常函数可以进行重载
    void p()  //普通对象会调用
    {}
    
    void p() const  //常对象会调用
    {}
    class Test
    {
        int n;
        static int n2;
        const int n3;
    public:
        Test(int a) :n3(a)    //对于常量必须一开始就赋值
        {
            n = a;
        }
    
        void setNum(int a)
        {
            n = a;
        }
    
        static void setNum02(int a)
        {
            n2 = a;
        }
    
        void setNum03(int a) const
        {
        }
    };
    
    void main()
    {
        const Test t(10);
        Test::setNum02(15);
        system("pause");
    }
  • 相关阅读:
    net core 使用 rabbitmq
    asp.net core WebApi 返回 HttpResponseMessage
    asp.net core 2.1 WebApi 快速入门
    JQuery EasyUI combobox动态添加option
    php截取字符去掉最后一个字符
    JQuery EasyUI Combobox的onChange事件
    对于不返回任何键列信息的 selectcommand 不支持 updatecommand 的动态 sql 生成
    Access2007 操作或事件已被禁用模式阻止解决办法
    Easyui 中 Tabsr的常用方法
    Win 7 IE11不能下载文件,右键另存为也不行
  • 原文地址:https://www.cnblogs.com/ssyfj/p/10624652.html
Copyright © 2011-2022 走看看