关于const的笔记

今天让指针常量,常量指针的说法搞糊涂了,原理明白,但是叫法上的区分糊涂呵呵!const是C特别是C++中经常遇到的东西,能灵活的运用可以体现你的CC++的水平。

  1. 常量和预编译
         我们都知道在C中用到常量往往是通过预编译来实现,但是这样最大的缺点是不能够进行类型检查,使用const修饰变量就可以客服这样的缺点。
         常量在定义时必须初始化,除非它是extern
  2. const与指针(重点)
         一般来讲我们可以定义5中类型的指针:
        int  *pdata1;
        const int *pdata2;
        int const pdata3;
        const int * const pdata4;
        int const * pdata5;
        第一个和第四个比较简单:pdata1是普通的指针;pdata4是指向常量的指针常量:指向和指向的内容都不能改变。
        对于1,3我们看const与
    的位置:

如果const在之前。那么就是常量指针,否则就是指针常量,
    如:
    char * const a = 0,b; 是指针常量,const只属于a不属于b
    char const * a; 是常量指针
    const char * a; 也是常量指针
        我自己总结了这样的记忆方法:前固数,后固址!就是说const在
前是固定数据,在后是固定地址。大家还可以看出 “数”正好在“址”的按照音序的前面,这样理解记忆就好了。
        通过上面的讲解,我想大家见到以后肯定不会出错了。但是怎样区分这两种说法呢?“常量指针”“指针常量”类比是最好的方法我经常这样用:“函数指针”“数组指针”。“函数指针”是指向函数的指针,“数组指针”是指向数组的指针。那么,“常量指针”是指向常量的指针,也就是内容“数据”不能改变。指针常量就是另外的一种意思。
       最后需要注意的是:指针常量在定义时必须初始化,因为后面再也不能修改。
3. 常量和函数
    常量和函数的联姻还是出于效率的考虑。这也是const的最常用的用途之一。
    3.1 const修饰函数的参数,参数传递时按值传递需要复制一份,当数据量很大时,是很昂贵的。用了指针把地址传过去就可以了。如果不想让函数改变参数的的值的话就用const修饰。
   void fun(const int *p);
    3.2 const修饰函数的返回值,还是出于效率的考虑当函数返回时,也是需要临时变量的,如果用指针(当最好是引用C++的新特性)就可以省去这样的开销。为了保证数据的安全性,返回的数据可能不想让用户随便改动,那么使用const : const char *getname();
   3.3 在C++中修饰成员函数,防止改变对象的状态(成员变量): char *player :: Getname() const,const的成员函数不能够调用非const的函数。那么是不是const函数什么都不能改呢?不是。C++中提供了mutable 关键字来修饰变量,使得它可以在任何的函数中可以修改。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值