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){},不能在构造函数中初始化。

原文地址:https://www.cnblogs.com/xj626852095/p/3648081.html