C++关键字const

1、const修饰变量,表示变量不能被改变,并且变量必须初始化

const int N=100;
N=200;//错误,N不能被改变
const int i;//错误,i未能初始化

2、const初始化引用用法,可以使const引用绑定到一个非左值上
C++允许这么做,是因为const引用将创建一个临时变量,并且允许绑定

int &i=2;//错误,左值引用只能绑定左值,不允许绑定一个右值
const int &j=2;//正确,常量引用可以绑定到非左值上
int ii=222;
const double &iii=ii;//可以转化类型也是正确的

3、顶层const和底层const
用const 和指针同时使用有两种情况

int i=2;
const int* ii=&i;
int* const iii=&i;

第一种情况就是底层const
const 修饰的是指针ii指向的i,ii的地址可以改,但是不可通过ii去改i的值
第二种情况就是顶层const
和第一种相反,iii的地址不可以改,但是却可通过iii去改i的值
是不是有点相似感,左值引用就是指针常量也就是第二个情况
4、const应用到类中
用const修饰该对象,不允许对象中的成员变量被修改

class A{
    public:
        int a=2;
        void seta(int b){
            a=b;
        }
        int geta(){
            return a;
        }
};
int main(){
    const A n;
    n.a=3;//错误
    return 0;
}

用const修饰该对象,不允许对象调用非const成员函数

class A{
    public:
        int a=2;
        void seta(int b){
            a=b;
        }
        int geta(){
            return a;
        }
};
int main(){
    const A n;
    n.seta(10);//错误
    std::cout<<a.geta()<<'\n';//错误
    return 0;
}

用const修饰该对象,允许对象调用const成员函数,但还是不允许改变成员变量

class A{
    public:
        int a=2;
        void seta(int b)const{
            a=b;
        }
        int geta()const{
            return a;
        }
};
int main(){
    const A n;
    n.seta(10);//错误,还是不允许改变成员变量
    std::cout<<a.geta()<<'\n';//正确,可以调用
    return 0;
}

原因就是调用seta()函数时候调用了this指针,而this指针被const修饰不允许this->a=b去改变成员变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值