const 使用方法具体解释

const使用方法具体解释

面向对象是C++的重要特性. 
可是c++在c的基础上新添加的几点优化也是非常耀眼的
就const直接能够代替c中的#define
下面几点非常重要,学不好后果也也非常严重

const
1. 限定符声明变量仅仅能被读
   const int i=5;
   int j=0;
   ...
   i=j;   //非法。导致编译错误
   j=i;   //合法
2. 必须初始化
   const int i=5;    //合法
   const int j;      //非法。导致编译错误
3. 在还有一连接文件里引用const常量
   extern const int i;     //合法
   extern const int j=10;  //非法,常量不能够被再次赋值
4. 便于进行类型检查
   用const方法能够使编译器对处理内容有很多其它了解。
   #define I=10
   const long &i=10;   
   char h=I;      //没有错
   char h=i;      //编译警告。可能因为数的截短带来错误赋值。
5. 能够避免不必要的内存分配
   #define STRING "abcdefghijklmn "
   const char string[]="abcdefghijklm ";
   ...
   printf(STRING);   //为STRING分配了第一次内存
   printf(string);   //为string一次分配了内存,以后不再分配
   ...
   printf(STRING);   //为STRING分配了第二次内存
   printf(string);
   ... 
   因为const定义常量从汇编的角度来看,仅仅是给出了相应的内存地址。
   而不是象#define一样给出的是马上数,所以。const定义的常量在
   程序执行过程中仅仅有一份拷贝,而#define定义的常量在内存中有
   若干个拷贝。
6. 能够通过函数对常量进行初始化
   int value(); 
   const int i=value();
   dapingguo说:假定对ROM编敲代码时,因为目标代码的不可改写,
   本语句将会无效,只是能够变通一下:
   const int &i=value();
   仅仅要令i的地址处于ROM之外。就可以实现:i通过函数初始化,而其
   值有不会被改动。
7. 是不是const的常量值一定不能够被改动呢?
   观察下面一段代码:
   const int i=0;
   int *p=(int*)&i;
   p=100;
   通过强制类型转换。将地址赋给变量。再作改动即能够改变const常量值。
8. 请分清数值常量和指针常量,下面声明颇为玩味:
注意两点:
    1. 口诀:【左值。右向】。const在*左边。限定指针指向的内容为常量。const在*右边,限定指针本身的值为常量
    2. const 和相邻的类型keyword的前后顺序能够互换:const int 和int const全然一样。可是*不是类型keyword。
   int ii=0;
   const int i=0;            //i是常量,i的值不会被改动
   const int *p1i=&i;        //指针p1i所指内容是常量。能够不初始化