博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
const用法小结
阅读量:4073 次
发布时间:2019-05-25

本文共 2035 字,大约阅读时间需要 6 分钟。

     语法格式: 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".

转载地址:http://xawni.baihongyu.com/

你可能感兴趣的文章
Flash调用Alchemy编译的代码时出现Error #1506的解决
查看>>
史上最正确的achemy安装方法
查看>>
As3中实现卡马克卷轴算法
查看>>
Flash中实现语音变声(下)
查看>>
StageVideo API
查看>>
[转]三维成像原理
查看>>
Flex Custom Component LifeCycle
查看>>
获取.fla所有导出类名称列表的方法
查看>>
关于FLASH 3D游戏的想法,做一个双人合作射击的游戏,
查看>>
PNG图片优化技术(一)
查看>>
photoshop 优化 PNG 图片尺寸大小 终极秘技!
查看>>
mmo游戏开发应在profile下运行,才能保证正式运行不卡
查看>>
关于Flash CS3创建Sprite类型的问题
查看>>
AS3通俗教程---AS3自身loading制作
查看>>
0 bytes after compression出现的情况
查看>>
内存回收专题
查看>>
[资料] 史上最强的伯克利大学1024线飞龙AI下载地址,有没有人有兴趣来测试一手?...
查看>>
Discuz多人斗地主积分版,消耗论坛积分的斗地主
查看>>
discuz X2斗地主积分版插件安装方法(用户版)
查看>>
ASP.NET程序也能像WinForm程序一样运行
查看>>