c/c++之const

     c/c++中的const是个好东西,但是东西往往杂糅不堪,对于这个c/c++知识中的冰山一角,决定给它来一次全面体检,当然我这个不称职的doctor只能做部分体检项目。权且当作自己的笔记吧。

    

1。const 和常用变量

      这里说的常用变量,其实指的就是c++中的内置类型。

      例如定义:const int a =100;

                     int const a=100;

      上述两个语句功能一样,就是a这个int变量被永远赋值为100的int常量了,不可修改,在这点上其实可以觉得const和define有相似之功能,但是const相比与define来说是有优点的,优点包括:const有类型检查,而define则都认为是字符,没有类型检查;有些集成的调试工具可以对const常量进行调试,而不能对宏常量进行调试。

 

2。const和指针

     const和指针的关系就复杂了,基本呈网状结构,这里只是理顺一部分,不敢说全部理顺。

     基本规则:const在*的前面,那么这个指针指向的是个常量,即无法通过指针对其修改,可以称为常量指针;const在*的后面,即该指针本身不能被修改了,比如对指针本身进行+-,可以称为指针常量。

     eg: const int *p=&a;//ok

           int *m=&a;//error,只能用常量指针指向常量

           int c=0;

           const int *m=&c;//ok,可以用常量指针指向常量,但是不能通过指针m修改c的值了

           const int *const ptr=&a;//ok,这里ptr指向一个常量,同时该指针本身不能被修改,这类指针是指向const对象的const指针,该句可以翻译为:首先ptr是个const指针,指向int类型的const对象。

 

3。const和函数

      在这里把函数分为了普通函数和类里面的成员函数,对于普通函数和成员函数,const均可修饰里面的parameter的属性。在一个函数声明式内,const可以和函数返回值,各个参数,函数自身(如果是成员函数)产生关联。

      1)const与修饰函数参数

      例如:

              void f1(const Widget * pw)// f1获得一个指针,这个指针指向一个常量的Widget对象

      在函数中无法对const的参数进行修改

     2)const修饰函数,位于函数声明最前面

       const有一个作用就是避免意外的将==输入变成了=。因为在函数声明最前面加上const之后,表示返回的东西是个常量,是不能被修改的,赋值当然是不行的,从而有效避免了将==错误写成=。

      3)c++中,const修饰在成员函数的参数列表之后

      const成员函数 

        带来的基本好处有二:(1)是class接口更容易理解。指明了那些函数可以修改对象内容那些则不能。

                                       (2)使得 操作cosnt对象成为可能

         对于const成员函数,是在参数列表后的)后面加上const,接着是{。。。}。表示在这个成员函数里面是不会对对象的成员进行修改的。两个函数能够通过const进行区分,而不是覆盖。

         const对象能够调用const成员函数,而非const对象则不能用const成员函数处理。const成员函数不可以更改对象内任何non-const成员变量(这个可以叫做non-static成员变量的bitwise constness约束)。当我们在const成员函数中希望修改某些成员变量时候,可以在定义该变量的时候在其前面加上mutable,就可以释放掉bitwise constness约束,从而能在const成员函数中对其进行修改。

         那么想在非cosnt成员函数中想对某些成员变量进行约束,从而使得在该成员函数中之后的代码不能修改该成员变量的值,那么该怎么办呢~可以进行类型转,static_cast<const 类型>(*this),就可以做到了。

 

          另外,const对象只能调用const成员函数,因为非const成员函数可能会修改对象的某些成员变量。const成员函数如果想修改对象中的成员变量的话,可以在该成员变量的声明加关键字mutable,例如mutabe int count,这样count就能被const成员函数修改了。

    

        

 

 

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大胖5566

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

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

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

打赏作者

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

抵扣说明:

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

余额充值