const关键字

一、const变量在C语言和c++中的区别

//在C语言中以变量为主
const int n=10;
int ar[n]={1,2};//在这里会报错,认为n是变量
//在c++中以常量为主
const int n=10;
int ar[n]={1,2};//OK,在这里认为n是常量

在c++中,汇编的过程会将所遇到的常量更换为其代表的值,即ar[n]==>ar[10];

二、const与指针的关系

int main()
{
    int a=10,b=10;
    int *p1=&a;        //普通指针
    const int *p2=&a;  //指向为常性,即解引用为常性   int const *p2=&a;两者代表一样  
    int *const p3=&a;  //指针变量自身为常性
    const int * const p4=&a; //指向(解引用)和指针变量自身都为常性
}

1.常变量与指针的关系

int main()
{
    const int a=10;    //常量a
    int *p1=&a;        //err *p1可以改变,会使a的值改变,与常量a不符
    const int *p2=&a;  //ok  *p2不可以改变,即指向不可改,但指针自身可以改变
    int *const p3=&a;  //err *p3可以改变,会使a的值改变,与常量a不符,但指针自身不可改  
    const int *const p4=&a; //ok 指向不可改,指针自身也不可改
    int *p5 = (int *)&a;    //ok (int*)为强转,此方法虽可行,但不安全
    int *p5=reinpreter_cast<int *>(&a);    //去常,去掉a的常性
    //去常与强转相比,强转更加好一些
    return 0;
}

注意:

        1.全局变量未初始化为0,局部变量未初始化未随机值

        2.const全局变量和局部变量都必须初始化,const结构体初始化时,全局的为0,局部的为随机值

        3.const int *p;//可以编译通过,因为在此时是指向不可改,不牵扯指针变量自身

           int *const sp;//不可以编译通过,此时指针变量自身不可改,故必须进行定义

2.兼容规程

能力强的指针赋值给能力收缩的指针

int a=10;
int *p=&a;
const int *s1=p;
int *const s2=p;
const int *const s3=p;

三、const引用

const引用(万能引用),可以引用左值,也可以引用右值

int main()
{
    int a=10;
    const int b=20;//b为常性值,只读不写
    int &x=b;      //x可读可写
    const int &x=b;
    const int &y=a;
    const int &z=10;
    return 0;
    
}

四、const与this指针

在类中,只要声明过的对象,都会加入this指针

CGoods * const this   //加入const为防止this指针置nullptr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值