• C++之const


            const是C++中的关键字,又叫常量限定符,作用是告知编译器const修饰的变量是不可修改的。

    1、const修饰常量

    1.1、修饰常量

    1. #include
    2. using namespace std;
    3. int main(int argc, char argv[])
    4. {
    5. // 在修饰常量时,int const和const int是等价的。
    6. int const a = 10;
    7. const int b = 20;
    8. cout << "a: " << a << "; b: " << b << endl;
    9. //a = 30; // 不允许修改,执行错误
    10. //b = 40; //不允许修改,执行错误
    11. return 0;
    12. }

    结果:

    a: 10; b: 20

    1.2、修饰数组

    1. #include
    2. using namespace std;
    3. int main(int argc, char argv[])
    4. {
    5. // 在修饰数组时,int const和const int是等价的。
    6. int const a[5] = {10, 20, 30, 40, 50};
    7. const int b[5] = {60, 70, 80, 90, 100};
    8. cout << "a: " << a[2] << "; b: " << b[3] << endl;
    9. //a[3] = 30; // 不允许修改,执行错误
    10. //b[4] = 40; //不允许修改,执行错误
    11. return 0;
    12. }

    结果:

    a: 30; b: 90

    1.3、修饰指针

    1. #include
    2. #include
    3. using namespace std;
    4. int main(int argc, char argv[])
    5. {
    6. // 变量num的值可以任意修改
    7. int num = 1876;
    8. // ptr_1将一直也只能指向变量num,不能指向别的int型变量
    9. int* const ptr_1 = #
    10. // 不能通过ptr_2修改num的值,ptr_2可以指向别的int型变量
    11. const int* ptr_2 = #
    12. // ptr_3将一直也只能指向变量num,不能通过ptr_3修改num的值
    13. const int* const ptr_3 = #
    14. return 0;
    15. }

    总结:

            若const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量。

            若const位于*的右侧,则const就是修饰指针本身,即指针本身是常量。

    2、const修饰函数

            const在函数中根据修饰的位置分为三种:函数参数、函数返回值、成员函数。

    2.1、const修饰函数参数

            参数可以是变量、指针、引用等。

    1. #include
    2. #include
    3. using namespace std;
    4. int sum(const int a, const int b)
    5. {
    6. // a = 100; // 执行错误,const修饰不能修改
    7. return a + b;
    8. }
    9. int main(int argc, char argv[])
    10. {
    11. int a = 10;
    12. int b = 20;
    13. cout << "sum: " << sum(a, b) << endl;
    14. return 0;
    15. }

    结果:

    sum: 30

    2.2、const修饰函数返回值

            返回值可以是指针、引用、或者值传递(值传递没有必要用const修饰)等。

    1. #include
    2. #include
    3. using namespace std;
    4. class student
    5. {
    6. public:
    7. private:
    8. int age = 10;
    9. };
    10. student std_1;
    11. // 值传递,没有必要用const修饰
    12. const int sum(int a, int b)
    13. {
    14. return a + b;
    15. }
    16. // 返回值为指针
    17. const student* get()
    18. {
    19. return &std_1;
    20. }
    21. int main(int argc, char argv[])
    22. {
    23. int a = 10;
    24. int b = 20;
    25. cout << "sum: " << sum(a, b) << endl;
    26. const student* std_2 = get();
    27. student std_3;
    28. //std_2 = std_3; // std_2是一个常量不能改变
    29. return 0;
    30. }

    结果:

    sum: 30

    2.3、const修饰类的成员函数

            const修饰的成员函数为了保护成员变量,要求const函数不能修改成员变量,否则编译会报错。

            函数体内不能修改成员变量的值,增加程序的健壮性或鲁棒性。只有成员函数才可以在后面加const,普通函数后加const无意义。

    1. #include
    2. #include
    3. using namespace std;
    4. class student
    5. {
    6. public:
    7. void set(int age_t) const;
    8. private:
    9. int age = 10;
    10. };
    11. void student::set(int age_t) const
    12. {
    13. // 因为age是成员变量,set函数不能修改成员变量的值,所以此处执行失败
    14. //age = age_t;
    15. cout << "aa bb cc dd ee ff." << endl;
    16. }
    17. int main(int argc, char argv[])
    18. {
    19. student std_1;
    20. std_1.set(100);
    21. return 0;
    22. }

    结果:

    aa bb cc dd ee ff.

    const函数的规则:

            [1]、const对象只能访问const成员函数,非const的对象可以访问任何成员函数,包括const 成员函数。

            [2]、如果函数名、参数、返回值都相同的const成员函数和非const成员函数是可以构成重载,那么const对象调用const成员函数,非const对象默认调用非const的成员函数。

            [3]、const成员函数可以访问所有成员变量,但是只能访问const的成员函数。

            [4]、非const成员函数,可以访问任何成员变量,也可以访问任何成员函数。

            [5]、const成员函数不能修改任何的成员变量,除非变量用mutable修饰。

  • 相关阅读:
    2个Integer类型的数据为什么不能比较是否相同了
    【Unity之竖屏游戏制作】如何做一个竖屏的手机游戏
    Android四大组件之Service(二)
    ctfshow sql171-179
    《Operating Systems:Three Easy Pieces》 操作系统导论【二】 虚拟化内存
    实验七 状态机及键盘输入 chisel
    windows下rust调试运行环境部署
    ISC技术分享:从BAS视角看积极防御体系实践
    完美世界:曹雨生VS仙殿传人删减,双骨至尊,泄露石昊身份被灭口
    设计模式12-行为型设计模式-模板设计模式
  • 原文地址:https://blog.csdn.net/qq_34486832/article/details/138198186