• C++ Const 使用总结,代码实例亲测


    1. 修饰普通变量

    修饰变量语法 const TYPE value  <==> TYPE const value 两者等价, 变量不可修改,无需说明。

    2. 修饰指针

    首先看下面一段 代码 , 输出结果为a1: 1     a2: 2       b1: 10 没有错误。

        int a = 1;
        int b = 10;

        cout << "a1: " << a << endl;
        int * p = &a ;
        (*p)++;
        cout << "a2: " << a << endl;
        p = &b;
        cout << "b1: " << b << endl;

    加一个const后, 红字部分出现编译错误,说明此时(*p)是const的,指针指向的内容不能修改 

        int a = 1;
        int b = 10;

        cout << "a1: " << a << endl;
        const int * p = &a ;
        (*p)++;
        cout << "a2: " << a << endl;
        p = &b;
        cout << "b1: " << b << endl;

    将const换一个地方,红字部分出现编译错误,说明此时指针p是const的,指针本身不能再修改,不能指向其他地方。

        int a = 1;
        int b = 10;

        cout << "a1: " << a << endl;
        int *const p = &a ;
        (*p)++;
        cout << "a2: " << a << endl;
        p = &b;
        cout << "b1: " << b << endl;

     3. 修饰函数形参

    例: int fun(int const a)  说明形参a 在函数体内不能变化。   参数的形式各异,可以是变量,指针,引用等。

     

    4. 修饰类对象 类成员

    首先如下代码:

    class A
    {
    public:
        A(){ num = 1;}
        int num;
        void fun1()
        {
            num++;
            cout << "fun1_num: " << num << endl;
        }
        void fun2()
        {
            num++;
            cout << "fun2_num: " << num << endl;
        }
    
    };
    
    int main ()
    {
        A a;
        a.fun1();
        a.fun2();
        return 0;
    }

    a. 如果用const 修饰对象,将21行改为 const A a; 那么22 23行将会报错,因为const修饰对象时,任何非const的方法都不能调用,因为此方法有修改成员变量的意图,应该改为void fun1() const  和 void fun2() const,并将num++去掉。

    b. 如果用const修饰类的方法,如a中的void fun1() const  表示该方法不会修改类成员变量,所以num++不能加进去。

    c. 修饰成员变量,如果上面的num为 const int num,那么这只能在初始化列表中初始化 A():num(1){},不能在构造函数中初始化。

  • 相关阅读:
    MySQL中char(36)被认为是GUID导致的BUG及解决方案
    Hadoop相关的考题
    算法题
    对于Java静态内部类的理解
    关于网站数据分析
    static class 静态类(Java)转
    《深入浅出数据分析》读书笔记
    hive利器 自定义UDF+重编译hive
    使用kubectl实现Kubernetes容器与本地的文件双向复制
    Coolite Toolkit学习笔记二:服务器端Alert,Confirm,Prompt
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3648081.html
Copyright © 2020-2023  润新知