[C++基礎]令人頭疼的const關鍵字

來源:互聯網
上載者:User
const的位置
//****************************整型常量**************************    const int a=1;//必須賦初始值    int const b=2;//必須賦初始值;完全等價於 const int b=2;    //const int c; int const d;//錯誤;必須有初始值    //a=9+3;  b=12;//不允許再進行賦值//***********************常量指標*****************************    int s=12;     const int *iptr;//常量指標;可以不賦初始值    //const修飾的是int,而int定義的是一個整型值。因此*iptr所指向的對象的值不能通過*iptr來修改,但是可以重新給iptr來賦值,使其指向不同的對象    iptr=&a;    iptr=&b;    iptr=&s;     //*iptr=123;錯誤。    //常量指標與普通指標的區別只有一個,就是不能通過*ptr來間接地修改s的值。 //********************指標常量*********************    int* const ptr=&s;//指標常量(想想整型常量);必須賦初始值;且初始值賦&a後&b都是錯誤的    //const修飾的是ptr,ptr代表的是一個指標地址,因此不能賦給ptr其他的地址值,但可以修改ptr所指向的值    //ptr=&s;//指標不允許再賦值    *ptr=123;//成功。    //指標常量與整型常量的差別:可以通過*ptr來間接地修改s的值
const的修飾對象

看到const 關鍵字,C++程式員首先想到的可能是const 常量。這可不是良好的條件反射。如果只知道用const 定義常量,那麼相當於把火藥僅用於製作鞭炮。const 更大的魅力是它可以修飾函數的參數、傳回值,甚至函數的定義體。 

const輸入參數

如果參數作輸出用,不論它是什麼資料類型,也不論它採用“指標傳遞”還是“引用傳遞”,都不能加 const 修飾,否則該參數將失去輸出功能。const 只能修飾輸入參數。

如果輸入參數採用“值傳遞”,由於函數將自動產生臨時變數用於複製該參數,該輸入參數本來就無需保護,所以不要加const 修飾。 

“引用傳遞”有可能改變參數a,這是我們不期望的。解決這個問題很容易,加const修飾即可,因此函數最終成為void Func(const A &a) 

const傳回值

如果給以“指標傳遞”方式的函數傳回值加const 修飾,那麼函數傳回值(即指標)的內容不能被修改,該傳回值只能被賦給加const 修飾的同類型指標。

函數傳回值採用“引用傳遞”的場合并不多,這種方式一般只出現在類的賦值函數中,目的是為了實現鏈式表達。 

const成員變數

1.static const int b=234;//只有靜態常量變數才可以在類中初始化

2.類的const常量只能在初始化表裡被初始化,因為它不能在函數體內用賦值的方式來初始化

3.類中的常量:怎樣才能建立在整個類中都恒定的常量呢?別指望const資料成員了,應該用類中的枚舉常量來實現。例如

class A

{…

enum { SIZE1 = 100, SIZE2 = 200}; // 枚舉常量

int array1[SIZE1];

int array2[SIZE2];

};

枚舉常量不會佔用對象的儲存空間,它們在編譯時間被全部求值。枚舉常量的缺點是:它的隱含資料類型是整數,其最大值有限,且不能表示浮點數(如PI=3.14159)。

const成員函數 

聲明:<類型標誌符> 函數名(參數表)const;

  • const是函數類型的一部分,在實現部分也要帶該關鍵字。Eg:int A::getValue() const
     {}   
  • const關鍵字可以用於對重載函數的區分。
  • 常成員函數不能更新類的成員變數,也不能調用該類中沒有用const修飾的成員函數,只能調用常成員函數。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.