const & static 關鍵字

一、const 修飾符

1. const 修飾符在C++中除了表現出和C語言相同的特性外,還表現出一些與類相關的特性。

2. 在C語言中

  • 用 const 修飾符修飾的變量通常也被稱爲常量類型,但其實稱爲只讀類型更準確,表明該變量不應該被修改。
  • 用 const 修飾符修飾的變量必須在定義時初始化,且僅能初始化一次。
  • const 常量可以被其他文件引用,但在被引用時常量不可被再次賦值。
  • 與宏定義相比,const 常量具有數據類型,只在初始化的時候分配一次內存,以後都不會再分配。編譯器可以對後者進行類型安全檢查,而對前者進進行字符替換,並且在字符替換時可能會產生意料不到的錯誤(邊際效應)

3. 在C++中

  • const可以修飾成員變量,表示該成員變量在對象的生命週期內不可改變。類的const成員跟普通成員一樣,但其不可被修改,且必須在構造對象時顯式賦初值。
  • const可以修飾成員函數,防止在函數中意外的修改成員。
  • 使用const修飾入參表明不希望對該參數做出更改,因此不管是值傳遞還是引用傳遞,在函數體內對入參的任何修改都會報編譯錯誤。

4. const變量存儲特性

  • const全局變量存儲在只讀數據段,此時它表示的是一個常量。除此之外const變量跟非const變量存儲的位置一致,因爲const變量僅僅只是用來表示它是隻讀的,我不希望任何人改變它。
  • const全局變量在編譯期最初將其保存在符號表中,第一次使用時爲其分配內存,在程序結束時釋放。

 

二、static 修飾符

1. static 修飾符在C++中除了表現出和C語言相同的特性外,還表現出一些與類相關的特性。

2. 在C語言中

  • 用 static 修飾的全局變量用來修改訪問權限,該變量只能在定義的源文件中被訪問。
  • 用 static 修飾的局部變量用來修改生命週期,該變量同全局變量都存儲在全局(靜態)區。
  • 在頭文件中定義的static 變量被在包含的源文件中當做不同的變量分別拷貝一份,就算該頭文件已經被限制不可重複引用。此種做法是禁忌!!!

3.在C++中

  • static可以修飾類成員變量,表示這個變量屬於類,既可以使用類名來訪問,也可以使用對象名來訪問。但該成員屬於類,在整個生命週期中只有一個拷貝。
  • static可以修飾類成員函數,表示這個函數屬於類,因此這個函數沒有隱含的this指針,所以函數只能訪問static成員,不能訪問非static成員。
  • 使用static修飾類成員時需注意,由於成員變量屬於類,被所有的對象共享,因此需要在對象被實例化之前在類外被初始化。

4.static變量存儲特性

所有的static成員變量都存儲在靜態去,在編譯期就爲其分配內存,在程序結束時釋放。

 

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