C++ const修饰符

    const修饰符可以修饰指针、数据成员、成员函数和类对象。接下来分别进行解释:

1.修饰指针

    const 对象一旦创建就不能改变,所以const对象必须初始化。可以是任意的表达式;

    const int i = get_size();   //true
    const int j = 42;           //true
    const int k;                //false

(1)指针常量    

    例如:int a = 10; int * const p = &a; 

     const 修饰的是p这个指针,所以是指针常量,指针的地址不能改变,但是指针的内容可以改变。

    int a = 10;
    int b = 299;
    int* const p = &a;
    a = 999;       // true 可以通过原来的变量修改值
    *p = 100;      // true
    p = &b;        // false

 

(2)常量指针

 

    例如:int a = 10; const int *p = &a;(或 int const *p = &a;)

const 修饰的是其类型,指针指向的值不可改变,但是可以改变p的地址,因为p这里是一个变量。 

    int a = 10;
    int b = 299;
    int const *p = &a;
    p = &b;      // true
    a = 999;     // true
    *p = 300;    // false

(3)指向常量的指针常量

    这个就比较简单了,地址和值都不能改变,如下所示:

    int a = 10;
    const int* const p = &a;

2.修饰数据成员

    修饰数据成员的时候,初始化只能在参数列表里,被const修饰的数据成员,不能被修改。如下代码所示:

class Const_test{
public:
    Const_test(int v):value(v){
        
    }
private:
    const int value;
};

3.修饰成员函数

    const放置的位置 : 函数声明之后,实现体之前。要求在声明和定义处都要有const修饰。const所修饰的成员函数能访问const和非const数据成员,但不能修改非const数据成员,只能访问const成员函数,不能访问非const成员函数。   

    构成重载:const对象只能调用const成员函数。非const成员对象,优先调用非const成员函数,若无,则可调用const成员函数。

class Const_test{
public:
    Const_test(int v):value(v){

    }
    void display()const{
        age = 10;   //错误
        int temp = 10; //正确
        temp = age;
        print();//错误
    }
    void dispaly(){//重载

    }

    void print(){

    }

private:
    int age;
    const int value;
};

4.修饰类对象

    const修饰函数,是从函数层面,不修改数据。const修饰对象,是从对象的层面,不修改数据。只能调用const成员函数。

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Muti-Agent

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值