const用法小结

     语法格式: const 类型名 常量名=常量值(表达式);
     作      用: 定义时初始化,之后不可修改,不可以函数返回值进行初始化.const修饰符可以保证程序的健壮性.const可译作"只读".合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现.
     使用方法: const修饰符常和指针联合使用.const 是一个左结合的类型修饰符,它与其左侧的类型修饰符合为一个类型.切记,当const放在指针符*左侧,则表示修饰的是指针内容.当const放在指针符*右侧,则表示修饰的是指针本身.注意,若某变量使用const修饰后,编译器会查找该变量在应用程序中是否发生变化,若变化,则编译器会报错.
   1、指向常量的指针变量
      如: char name[] = "lishuai";
        const char *p_name = name;  或  char const *p_name = name;
      修饰符const放在指针符*的左侧,表示指针内容不可变,即用户不能改变字符串"lishuai"或"yanzi"的内容.
       p_name[2] = 'a';    //错误(原因:改变了指针所指向的内容),无法通过编译
       p_name = "beijing"   //正确(原因:改变了指针的值),最后输出:"beijing"
   2、常量指针
      如: char name[] = "lishuai";
       char * const p_name = name;
      修饰符const放在指针符*的右侧,表示指针本身不可变,即用户不能改变指针p_name的值.
       p_name[2] = 'h';    //正确(原因:改变了指针所指向的内容),最后输出:"lihhuai"
       p_name = "yanzi";    //错误(原因:改变了指针的值),无法通过编译
      在该例程中,本来变量p_name是可变的,但由于const的修饰,而变为定值.
  
3、指向常量的常量指针
      如: char name[] = "lishuai";
       const char * const p_name = name;
      在指针符*的左右两侧均有修饰符const,表示指针本身和指针所指向的内容均不可变.
       p_name[2] = 'a';    //错误(原因:改变了指针所指向的内容),无法通过编译
       p_name = "beijing"   //错误(原因:改变了指针的值),无法通过编译

   【attention】

       const int a;                a是一个常整型数
       int const a;                a是一个常整型数
       const int *a;               a是一个指向常整型数的指针
       int * const a;              a是一个指向整型数的常指针
       int const * a const;     a是一个指向常整型数的常指针
       前两个的作用是一样,a是一个常整型数.
       第三个意味着a是一个指向常整型数的指针(整型数是不可修改的,但指针可以).
       第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的).
       最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数 是不可修改的,同时指针也是不可修改的).

   4、const限定函数的参数

      如:void func(const int var);
      上述写法限定参数在函数体中不可被改变.根据值传递的特点,变量var在函数体的改变不会影响函数外部.所以,此限定与函数的使用者无关,仅与函数的编写者有关.为了避免引起疑惑,可改写成如下:
         void func(int var)
         {
                   const int i = var;
         }
      例如:
      void delay(int var)
      {
          const int i = var;
        //for(i=var;i>0;i--);  //编译错误
          var = 10;
        //i = 100;             //编译错误
      }
      void main()
      {
          int i = 5;
          delay(5);
      }
    5、const限定类的成员函数
       这种用法只在C++中有用(C语言中没有成员函数).如:
       class classname
       {
           public:
               int func() const
               {... ...;}
       }
       采用这种const后置的形式一种规定,为了不引起混淆,在此函数的声明中和定义中均要使用const,因为const已经成为类型信息的一部分.但要注意,这种情况下,该函数不能修改类的数据成员,也不能在函数中调用其它非const的函数.比如:
       class base
       {
           int x;
           public:
              void test() const
              {
                  int c;
                  x = 5;   //错误
                  c = 10;  //正确
              }
       }
       这种情况下,在函数内部无法改变成员数据x的值,因此编译器会报错:"l-value secifies const object".
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值