const用法总结

来源:互联网 发布:淘宝油画风波 编辑:程序博客网 时间:2024/05/20 16:36

const类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令 

**************常量必须被初始化*************************

cons的作用

   (1)可以定义const常量         例如:

             const int Max=100;
             int Array[Max];        

   (2)便于进行类型检查            例如:

             void f(const int i) { .........}

        编译器就会知道i是一个常量,不允许修改;

   (3)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。

        还是上面的例子,如果在函数体内修改了i,编译器就会报错;
        例如: 

             void f(const int i) { i=10;//error! }

    (4) 为函数重载提供了一个参考。

         class A
         {
           ......
           void f(int i)       {......} file://一个函数
           void f(int i) const {......} file://上一个函数的重载
            ......
          };

     (5) 可以节省空间,避免不必要的内存分配。
         例如:

              #define PI 3.14159         file://常量宏
              const doulbe  Pi=3.14159;  file://此时并未将Pi放入ROM中
              ......
              double i=Pi;               file://此时为Pi分配内存,以后不再分配!
              double I=PI;               file://编译期间进行宏替换,分配内存
              double j=Pi;               file://没有内存分配
              double J=PI;               file://再进行宏替换,又一次分配内存!

         const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。

     (6) 提高了效率。

           编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

使用const

   (1)修饰一般常量,常数组,常对象

   修饰符const可以用在类型说明符前,也可以用在类型说明符后。      例如:  
 
           int const x=2;  或  const int x=2;

       int const a[5]={1, 2, 3, 4, 5};    或  const int a[5]={1, 2, 3, 4, 5};

           class A;      const A a;  或     A const a;
     
   (2)修饰指针

        const int *A;   或  int const *A; //const修饰指向的对象,A可变,A指向的对象不可变
        int *const A;                         //const修饰指针A,     A不可变,A指向的对象可变 
        const int *const A;      //指针A和A指向的对象都不可变

   (3)修饰引用

        const double & v;      该引用所引用的对象不能被更新

 (4)修饰函数的返回值:

        const修饰符也可以修饰函数的返回值,是返回值不可被改变,格式如下:
            const int Fun1(); 
            const MyClass Fun2();

   (5)修饰类的成员函数:

        const修饰符也可以修饰类的成员函数,格式如下:
            class ClassName 
     {
             public:
                  int Fun() const;
                    .....
             };
        这样,在调用函数Fun时就不能修改类里面的数据 

    (6)在另一连接文件中引用const常量

         extern const int i;     //正确的引用
         extern const int j=10;  //错误!常量不可以被再次赋值
   


*******************放在类内部的常量有什么限制?
  
 

 初始化类内部的常量

        1 初始化列表:

 

         2 外部初始化,例如:

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 办身份证要证明怎么办 15岁怎么办银行卡淘宝 满16岁怎么办银行卡 电脑最小化后不见了怎么办 满16周岁怎么办银行卡 给儿童办身份证怎么办 当兵前身份证号码不符怎么办 身份证后六位密码x怎么办 借了贷款人死了怎么办 贷款实在还不起怎么办 个人贷款还不起怎么办 珠海派出所办事不公平怎么办 改身份证后学籍怎么办? 威海身份证丢了怎么办 车牌轻微变形了怎么办 车牌照丢一个怎么办 小车车牌掉了怎么办 车牌撞变形了怎么办 车牌烂了一块怎么办 机动车牌照丢了怎么办 汽车想换车牌怎么办 机动车前牌照丢失怎么办 汽车后牌照丢失怎么办 机动车扣分超证怎么办 联通香港无服务怎么办 长乐改区 闽侯怎么办 学校代码查不到怎么办 买票没带身份证怎么办 163邮件发错人了怎么办 pos机未到账怎么办 刷卡迟迟不到账怎么办 农行全渠道升级怎么办 手机输入身份证x怎么办 买房子没有社区怎么办 结婚没钱买房子怎么办 假离婚买房子怎么办? 微信怎么办居住证厦门 厦门没有暂住证怎么办居住证 机票上没有登机口怎么办 德国黑工怎么办居留 夏天吹空调感冒怎么办