const 限定符 学习小结(1)

1)不能被修改

const bufsize = 512;

 buffsize在定义时必须初始化;定义处之外无法修改buffsize的值

2)只能在定义它的文件中使用

file_1.cpp

       extern const int bufsize =512;

      file_2.cpp

    extern const int bufsize;

  通过指定const对象为extern,才能在其他文件中被访问。否则只能在file_1.cpp中被访问。

3)指向const对象的指针

      const double  *cptr; //  cptr为指向double型的const对象的指针

  cptr可以改变,但是指向的类型不可以改变,为const double型

  eg.const double pi = 3.14;

     const double *cptr = &pi ;

  为什么要有指向const对象的指针? 因为指向const对象的指针不会改变其所指对象的值。但是它又可以

  指向别的对象。

4) 可以避免不必要的内存分配

  #define STRING "abcdefghijklmn\n"

  const char string[]="abcdefghijklm\n";

  ...

  printf(STRING); //为STRING分配了第一次内存

  printf(string); //为string一次分配了内存,以后不再分配

  ...

  printf(STRING); //为STRING分配了第二次内存

  printf(string);

  ... 

  由于const定义常量从汇编的角度来看,只是给出了对应的内存地址,

  而不是象#define一样给出的是立即数,所以,const定义的常量在

  程序运行过程中只有一份拷贝,而#define定义的常量在内存中有

  若干个拷贝。

5) const修饰指针的情况,见下式:
int b = 500; 
const int* a = & [1] 
int const *a = & [2] 
int* const a = & [3] 
const int* const a = & [4] 
我们可以参考《Effective c++》Item21上的做法,如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的 右侧,const就是修饰指针本身,即指针本身是常量。因此,[1]和[2]的情况相同,都是指针所指向的内容为常量(const放在变量声明符的位置无 关),这种情况下不允许对内容进行更改操作,如不能*a = 3 ;[3]为指针本身是常量,而指针所指向的内容不是常量,这种情况下不能对指针本身进行更改操作,如a++是错误的;[4]为指针本身和指向的内容均为常量。

 

 

posted @ 2012-06-27 20:49  propheteia  阅读(157)  评论(0编辑  收藏  举报