const與const指針

一.C/C++中的const

     C中的const是"一個不能被改變的普通變量",在C中,它總是佔內存的,而且它的名字是全局符,默認是外部連接.C編譯器不能把const看成一個編譯期的常量.在C中:

      const bufsize =100;

       char buf[bufsize];

 是錯誤的.

      C++中的const默認是內部連接,也就是說,const僅在const被定義過的文件裏纔是可見的,而在連接時不能被其他編譯單元看到.當定義一個const時,必須賦一個初值給它,除非用extern作了清楚的說明:

 extern const bufsize;

    C++編譯器通常不會爲const分配存儲空間,它把這個定義保存在符號表裏。

二 const指針

 當使用帶有指針的const時,有兩種選擇:或者const修飾指針正指向的對象,或者const修飾存儲在指針本身的地址裏.

 (1)指向const的指針

      const int * x;

     " x是一個指針,它指向一個const int",這裏不需要初始化,因爲說x可以指向任何東西,但是它所指的東西是不可以改變的.

 (2)const指針

    int  d=1; 

     int * const x=&d;

    "x是一個指針,這個指針是指向int 的const指針".因爲現在指針本身是const指針,編譯器要求給它一個初始化值,這個值在指針壽命期間不變.然而要改變它所指向的值是可以的,可以寫 *x=2;

三 const指針賦值

 int d =1;

    const int e=2;

    int *u=&d;  // ok--- d not const

    int *v= &e; //illegal ---- e const

    int *w =(int*)&e;  //legal but bad practice

四 類中的const

  類中的const必須在構造函數的初始化列表裏面初始化或者將其設置爲static

  class A{

           A() { const int size=3;}

          };

      或者:

       class A {

             static const int size=3;

      };

       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章