C++ 关键字 const

const是什么

我们知道const是C++中声明常量的关键字,今天我们来学习一下有关const的用法


使用场景

const修饰普通变量

我们先来说一下const最基本的用法,对于一个普通变量来说,我们在声明之后可以随时修改它的值。

    int a = 10;
    cout<<a<<endl;//10
    a = 20;
    cout<<a<<endl;//20

而对于一个const修饰的变量来说,它的值是不可修改的,且必须定义时就初始化,如果我们尝试修改一个const的值,g++编译器会报错:

    //const int a; 编译器报错:常量 变量a需要初始值
    const int a = 10;
    cout<<a<<endl;
    a = 20;//报错
    cout<<a<<endl;

const修饰指针

用const修饰指针时,也分为两种情况;

顶层const(指针常量):既指针指向的对象不可以修改(注意,这里的不可以修改是不可以通过const修饰的int修改,但如果指向的对象有其他变量名的话,是可以通过其他变量名修改的)

void func1() {
    int a = 10;
    const int *p = &a;//等同于int const *p = &a;
    cout<<*p<<endl;// 输出10
    
    *p = 20;//报错:表达式是必须可修改的左值  
    cout<<*p<<endl;
    
    a = 20;//可以这样改动
    cout<<*p<<endl;//输出 20
}

底层const(常量指针):即指针指向的方向不可以修改,但是指向的内容是可以修改的,同时也意味着不能接收一个const类型的对象

void func2() {
    int a = 10;
    int* const p = &a;
    cout<<*p<<endl;
    
    *p = 20;//正确,可以修改,因为是常量指针
    cout<<*p<<endl;

    int b = 30;
    p = &b;//报错,必须是可修改的左值

    const int c = 40;
    *p = &c;//不能将 "const int *" 类型的值分配到 "int" 类型的实体
}

如何区分指针常量(指针指向的对象是常量)和常量指针(指针本身是常量):

看const 与 *的位置关系,如:

const 在 * 的左边,指向常量的指针: const int *a; int const *a;

const 在 * 的右边,常量指针:int* const a;

const修饰成员函数

用const修饰的成员函数,不能修改类的成员变量,除非它用mutable修饰;另外,const是函数签名的一部分,也就是说可以因为const实现成员函数重载,调用的时候普通对象可以调用const版本的函数,但是如果有非const版本的重载,那么会选择非const。而

class myClass{
    int val;
    mutable int ChangbleVal;
    void func(int b) const {
        val = b;//报错:表达式必须是可修改的左值
        ChangbleVal = b;//成功
    }
};

与之有关的知识点

1const与static的区别

2constexpr

3const和成员函数重载,const对象和非const对象和 const成员函数和非const成员函数的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值