C++中const的簡單用法

安全劍客發表於2019-10-21
C++是C語言的繼承,它既可以進行C語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。C++擅長物件導向程式設計的同時,還可以進行基於過程的程式設計,因而C++就適應的問題規模而論,大小由之
一、符號常量的宣告

    常量宣告的語句的形式:  const + 資料型別說明符 + 常量名 = 常量值

                 資料型別說明符 + const + 常量名 = 常量值    

            注意:   符號常量在宣告時一定要賦初值,且在程式中不能改變其值。           

                  const float PI = 3.14159;                   //下面則是錯誤的宣告                   const float PI;                    PI = 3.14159;

二、const* 和 *const 的區分

    目前瞭解的形式

    例如:

 const int *p (int const *p)
        int *const p
        const int* const p

   

 1.const int *p (int const *p) 的意義

       二者表達的意思一致,即 *p 是個 const ,不能透過 *p 修改 p 的指向,所以也可以叫它為只讀型指標

由於是將指向的資料視為常量,定義的時候可以不用初始化

 1.   int a = 0;     
    const int* p;     
    p = &a;     
    *p = 2; //錯誤,不能透過*p 修改值   
   2.   int a = 0;      
       const int* p = &a;      
       a = 1;      
       cout< < *p << endl; //此時p指向的值可以改變,列印出來為 1    
   3.   int a= 0,b = 1;      
     const int* p = &a;      
      cout< < *p << endl; //*p 值為 0      
      p = &b;      
     cout << *p << endl; //*p 值為 1

  

  2. int* const p 的意義

      該定義將 p 視為一個const常量,所以定義時就要初始化,且p 指向的位置不能改變,所以也可以叫它指標常量

1.  int a = 0,b =1;
    int* const p = &a;
    p = &b;    //錯誤,p 的指向已不能改變
2.  int a = 0, b = 1;
    int* const p = &a;
    *p = b;
    cout < < *p << endl; //*p 為 1
3.  int a = 0, b = 1;
    int*const p = &a;
    a = b;
    cout < < *p << endl; //*p 為 1

(const int* p 與 int* const p 與 const int* const p 的區別)

  const int* p 表示把 p 指向的變數看成常量

  int* const p 表示把 p 自己定義為常量,所以定義時就要初始化

  const int* const p 表示 p、*p 都是常量,即 p 的指向不能改變,也不能透過 *p 改變 p 指向的值

  有個評論講的很有意思,share一下:

看"effective c++"第三條講到:
只需要判斷const是在 * 的左邊還是右邊即可。
左邊則是修飾被指物,即被指物是常量,不可以修改它的值;
右邊則是修飾指標,即指標是常量,不可以修改它的指向;
在左右兩邊,則被指物和指標都是常量,都不可以修改。

int c = 3;
int a = 2;
int b = 1;
//const出現在*左邊,則被指物是常量
const int * pi = &a;
*pi = b;//不正確 被指物是常量
pi = &c; //正確 
 //const 出現在* 右邊,則指標是常量
int * const p = &a;
p = &c;//不正確,指標是常量
*p = c;//正確
//const出現在*左右兩邊,則被指物和指標都是常量
const int * const ptr = &a;
ptr = &c;//不正確,指標是常量
*ptr = c;//不正確,被指物是常量

注意事項 !

1.如果有const int a = 0; 那麼必須是 const int* 才能指向 a,像 int* p =&a; 是非法的
2.const int a =10;
  int* p =&a; // 錯誤,這是不能取地址的,否則有修改值的能力

原文地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2660871/,如需轉載,請註明出處,否則將追究法律責任。

相關文章