• 浅谈c++中的关键字----const


    const-----英语全称(constant)-----常数,常量的意思

    在c++中的常用来修饰变量或者对象,意味着不能被更新。

    1:const+变量------限定变量的值,无法修改,对变量起保护作用,增加程序的健壮性;必须进行初始化。

    1. const int a=100;
    2. a=1000;//错误,无法修改
    3. const int b;//错误,没有进行初始化

    2:const+指针--------表示着常量指针,指针常量,指向常量的常指针。

    (1)指向常量的指针---常量指针(指针的指向(内存地址)可以更改,指针的值不可以修改)

    1. const int *h
    2. int const *h
    3. (这两个等价)

    例如:

    1. int g=100;
    2. int s=200;
    3. const int *p=&g;
    4. //修改指针p的地址可以吗?
    5. p=&s;
    6. //修改指针p的值可以吗?
    7. *p=10000;

         (&是取址符,因为p是地址,*P是解引出指针的地址)

    (2)指向指针的常量----指针常量(指针的指向(内存地址不可以更改),指针的值可以修改)

    int*const h

    例如:

    1. int g=100;
    2. int s=200;
    3. int *const p=&g;
    4. //修改指针p的地址可以吗?
    5. p=&s;
    6. //修改指针p的值可以吗?
    7. *p=10000;

    总结:const放在*的后面,意味着指针是常量,指针的值储存的是数据的内存地址,所以内存地址不能改变,但地址指向的数据是可以改变的。(指针常量)

    const放在*前面,意味着指针的指向的内存数据不可以改变,但指向的地址可以改变。(常量指针)

    (3)指向常量的常指针--------指针的指向不可以修改,指针指向的值也不可以修改

    例如:

    1. int g=100;
    2. int s=200;
    3. const int *const p=&g;
    4. //修改指针p的地址可以吗?
    5. p=&s;
    6. //修改指针p的值可以吗?
    7. *p=10000;

    3.const+函数--------(1)使函数的返回值不能改变;(2)使函数的参数在函数体内不可改变。

    1. const int func();
    2. const int* func();
    3. void func(const int a,const int *o);

    4:const+类

    (1)const修饰类中的成员函数-----类中的成员函数后面加上const(区分const+函数)

    ①该成员函数不能改变类中的成员变量

    ②加了const的成员函数可以被非const对象和const对象调用     但不加const的成员函数只能被非const对象调用

    ③const修饰的成员函数中不能调用其他的没有被const修饰过的成员函数

    1. class Person {
    2. public:
    3. Person() {
    4. m_A = 0;
    5. m_B = 0;
    6. }
    7. void ShowPerson() const {
    8. this->m_B = 100;//this指针的本质是一个指针常量,指针的指向不可修改,在const修饰的成员函数中,内存空间的指向的值也不能修改,意味着这是一个指向常量的常指针,但如果用mutable修饰变量,就可以修改。
    9. }
    10. void MyFunc() const {
    11. //mA = 10000;
    12. }
    13. public:
    14. int m_A;
    15. mutable int m_B; //可修改 可变的
    16. };

    (2)const修饰类中的成员变量-----(让成员变量变为不可修改的变量)

    (3)const修饰类对象

    1. //const修饰对象 常对象
    2. void test01() {
    3. const Person person; //常量对象
    4. cout << person.m_A << endl;
    5. //person.mA = 100; //常对象不能修改成员变量的值,但是可以访问
    6. person.m_B = 100; //但是常对象可以修改mutable修饰成员变量
    7. //常对象访问成员函数
    8. person.MyFunc(); //常对象不能调用const的函数
    9. }

  • 相关阅读:
    AtCoder Beginner Contest 276 G - Count Sequences 差分
    基于图搜索的规划算法之A*家族(六):D* Lite算法
    Java8 JSR310规范-时间日期API使用总结
    Spring Data REST 敏感信息泄露漏洞
    vue2学习之动态组件
    【面试题精讲】Java字符型常量和字符串常量的区别?
    YOLOv5改进实战 | GSConv + SlimNeck双剑合璧,进一步提升YOLO!
    Python自定义排序及实际遇到的一些实例
    Scala (十二) --------- IDEA 快捷键
    TDesign设计系统全方位解析
  • 原文地址:https://blog.csdn.net/Superman980527/article/details/128113971