• 【C++】const关键字的作用


    修饰普通变量

    const int a = 10;
    
    • 1

    修饰普通变量,意味着该变量和常量一样不能被修改,但是该变量如果被其他指针所指向的话,可以通过指针去修改

    修饰指针

    那么就需要将指向该变量的指针也修饰为const

    const int a = 10;
    const int* p = &a;//意味着指针p指向的变量不能被修改
    
    • 1
    • 2

    但是需要让p指针一直指向a变量,那么就需要这样:

    int* const p = &a;//意味着p指针指向a这个动作不能改变
    
    • 1

    当然我们也可以既让p指向a不变,也让p指向a的值不能改变:

    const int* const p = &a;//意味着p指向a不变,也让p指向a的值不能改变
    
    • 1

    修饰数组

    数组本身就是一个const的指针,其指向不能修改,也就是不能直接对数组变量进行赋值:

    int a[];
    a = 10;//这个操作是错误的,因为a ----->  int* const a
    
    • 1
    • 2

    但是可以对数组内部的元素进行const修饰

    const int a[];
    //a ------> const int* const a
    
    • 1
    • 2

    修饰函数形参

    修饰普通形参,没多大意义

    void fun(const int a)//表示a这个形参不会发生改变
    
    • 1

    修饰指针形参,表示外部的变量不会被修改,保护了数据安全性

    void fun(const int* a)//表示在fun函数内不能通过a这个指针来修改外部实参
    
    • 1

    修饰引用形参,表示该引用不能在fun函数内被修改,也是为了保护数据的安全

    void fun(const Type& a)//引用作为参数,是将外部实参传递给引用形参,
    //传递的是外部实参本身,提高了效率,为了保护数据,将引用形参设为const类型,保证在fun函数内不能修改该变量的值
    
    • 1
    • 2

    修饰成员变量

    意味着该成员变量不能被修改,那么只能在构造函数的初始化列表中赋值

    修饰成员函数

    意味着该成员函数是不能修改任何成员变量的值

    const对象和const成员函数的关系

    const对象不能调用非const成员函数,因为这样是权限的放大:const对象不能修改成员变量,但是调用了非const函数,可能会修改成员变量,编译器会报错

    非const对象可以调用const函数,也可以调用非const函数,因为这样是权限的缩小:非const对象可能会修改成员变量,而const函数是不会修改成员变量的,这样编译器是允许的

  • 相关阅读:
    c++编写天天酷跑游戏
    Python自动化测试selenium指定截图文件名方法
    Nacos使用教程(三)——nacos注册中心(2)
    2022金九银十工作潮,怎么样才能成功跳槽面试拿到高薪呢?
    AI数字人软件系统开发框架
    Python:函数定义的形参
    空间复杂度(Space Complexity)
    k8s部署gin-vue-admin框架、gitlab-ci、jenkins pipeline 、CICD
    二进制文件解析系列-如何解析Android中的FLAT文件?
    机器学习之归一化
  • 原文地址:https://blog.csdn.net/qq_40376612/article/details/133620866