关于const

1. const 放在函数的后面 (一般修饰成员函数)

     在普通的非const成员函数中,this的类型是一个指向类类型的const指针。可以改变this所指向的值,但不能改变this所保存的地址。在const的成员函数中,this的类型是一个指向const类类型对象的const指针。既不能改变const指向的对象,也不能改变this所保存的地址。

     任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数是,不慎修改了数据成员,或者调用了其他非const 成员函数,编译器将指出错误,这无疑会提高程序的健壮性。

    注意 :const成员函数只能访问const类型的成员函数 , 而非const对象可以访问任意的成员函数,包括const成员函数.

 

2. const 放在前面 修饰函数返回值   (一般用于地址返回)

    如果给以 “指针传递” 方式的函数返回值 加const修饰,那么函数返回值(即指针的内容不能被修改),该返回值只能被赋值给加      const修饰的同类型指针。

    例如:  const char * getstring();

                 char* str = getstring();  这样是错误的

                 const char* str = getstring();  这样是正确的

 

3. const 放在中间  修饰函数的参数

     如果输入参数采用 “指针传递” ,那么加const修饰可以防止意外的改动该指针,起到保护作用;

     对于非内置类型(即自定义类类型),采用值传递时,我们可以采用引用传递,这样可以提高传递效率(避免了构造、析构等操作),但是对于内置类型就没有必要了,然后此时如果我们希望引用传递进来的参数,不要被改变时,加const 进行修饰即可。

     例如:  void function(const A &input){}  (其中A是自定义类)

 

 

PS:

      1.  指向常量的指针

           仅仅要求不能通过改该指针改变对象的值,没有规定那个对象的值不能通过其他途径改变!

           指向常量的指针 定义 以后可以不断改变指向的对象

例如:    const char * k = new char;

               char a= 5, b= 6;
               k = &a;    // 此时不能通过就解引用k  *k  来改变a的值 ,但是可以直接用变量a自己改变自己的值

               k = &b;    // 定义后改变k指向的对象 这是允许的

         2.  const 指针 (常量指针

              先说个例子: 类内的 this 指针就是一个常量指针 。( A * const this  )

              将指针本身定义为常量,也就是它的地址,定义时必须初始化,而且一旦初始化完成,则它的值(也就是存放在指针中                的那个地址)就不能改变了 ,但是可以解引用地址改变这个地址上的值。 具体写法如下:

             char a=5; 

             char * const k = &a;  // k 将一直指向 a ,其指向的地址一直不会变了 k 不变了

             *k = 10;   // 解引用地址改变值,这是允许的

             const char * const kk = &a;  // kk 是一个指向常量对象的常量指针  不能通过解引用kk改变a的值,也不能改变kk的地址

             

             注意理解上面两点 。

            

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值