码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++ const修饰符


    文章目录

    • const修饰符
    • const的使用
      • 1. const修饰常量
      • 2. const修饰指针
      • 3. const修饰函数
        • 3.1 const修饰函数参数
        • 3.2 const修饰函数返回值
        • 3.3 const修饰类成员函数
      • 4 . const修饰类对象

    const修饰符

    常量修饰符,用来限定特定变量,通知编译器该变量不可以修改。使用const修饰符可以避免在函数中对某些不应修改的变量造成可能的改动。

    const的使用

    1. const修饰常量

    对于基本的数据类型,修饰符可以在类型说明前面,可以在后面。

    const int a = 100;
    int const b = 200;
    const int arr[2] = {1,2};
    
    • 1
    • 2
    • 3

    2. const修饰指针

    const修饰指针,分为两种情况,常量指针与常量的指针

    • 常量的指针(const数据),不可以修改指针指向的地址的值,但是可以改指针的指向。
    • 常量指针(const指针),可以修改指针指向的地址的值,但是不可以修改指针的指向。
    // const 数据
    const char * p = "hello";
    // const 指针
    char * const q = "world";
    // const 指针 + const 数据
    const char * const pq = "!!!!";
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3. const修饰函数

    const可以修饰函数的参数、返回值以及类型的成员函数。

    3.1 const修饰函数参数

    const只能修饰输入作用的参数,修饰输出作用的参数没有意义。
    修饰函数形参则在函数体内不能修改形参的值。

    3.2 const修饰函数返回值

    如果返回值为指针,加上const修饰后,内容是不可以修改的。
    同时,接收变量也必须是const修饰的。

    3.3 const修饰类成员函数

    const修饰成员函数是为了保护成员变量,要求const函数不能修改成员变量,否则编译不通过。
    函数体内不能修改成员变量的值,增加程序的健壮性。
    只有成员函数才可以在后面加const,普通函数后加const无意义。
    const修饰成员函数的规则

    • const对象只能访问const成员函数(因为非const成员函数可能会修改成员变量),非const的对象可以访问任何成员函数,包括const成员函数。
    • 函数名、参数、返回值都相同的const成员函数和非const成员函数是可以构成重载的。
      const对象调用const成员函数,非const对象默认调用非const的成员函数。
    • const成员函数可以访问所有成员变量(但是不能修改),但是只能访问const的成员函数。
    • 非const成员函数,可以访问任何成员,包括const成员函数。
    • const成员函数不能修改任何的成员变量,除非变量用mutable修饰。
    • 静态成员函数不可以被const修饰。const修饰成员函数实质上是对this指针进行限制,静态成员函数中没有this指针。
    #include 
    using namespace std;
    
    class myclass{        
    private:
            int a;
            mutable int b;
    public:        
            myclass(){
                    a = 1;
                    b = 2;
            }
    
            void print() const {
                    int c = 1;
                    // 非成员变量可以修改 
                    c += 1;
                    // mutable 修饰的成员变量可以修改 
                    b += 2;
                    
                    // 成员变量不可以修改 
                    cout << "a:" << a << endl;
                    cout << "b:" << b << endl;
                    cout << "c:" << c << endl;        
            }
    };
    
    int main(){
            myclass mc;
            mc.print();
            return 0;
            
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    4 . const修饰类对象

    const修饰的类对象的任何成员都不能被修改,const类对象只能调用const成员函数。

  • 相关阅读:
    第 372 场 LeetCode 周赛题解
    云游戏| 云计算推动游戏行业进入“新纪元”
    Vue中修改element-ui中的el-table中默认的暂无数据样式
    喜提JDK的BUG一枚!多线程的情况下请谨慎使用这个类的stream遍历。
    【原创】不同RTOS中POSIX接口的实现差异
    SpringBoot 27 Dubbo-admin、Zookeeper 安装
    java 从 HDFS 读取数据到本地文件
    电商商品的前后台类目设计思路,小本本记下来(提供获取京东淘宝商品类目信息API 免费测试)
    第21章 Spring事务管理之扩展篇(三)
    Scrapy爬虫之网站图片爬取
  • 原文地址:https://blog.csdn.net/first_bug/article/details/132695049
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号