C++ const 關鍵字

const 限定符和 static 的區別:

  • const 定義的常量在超出其作用域之後其空間會被釋放,而 static 定義的靜態常量在函數執行後不會釋放其存儲空間。
  • static 表示的是靜態的。類的靜態成員函數、靜態成員變量是和類相關的,而不是和類的具體對象相關的。即使沒有具體對象,也能調用類的靜態成員函數和成員變量。一般類的靜態函數幾乎就是一個全局函數,只不過它的作用域限於包含它的文件中。
  • 在 C++ 中,static 靜態成員變量不能在類的內部初始化。在類的內部只是聲明,定義必須在類定義體的外部,通常在類的實現文件中初始化,如:double Account::Rate=2.25; static 關鍵字只能用於類定義體內部的聲明中,定義時不能標示爲 static。
  • 在 C++ 中,const 成員變量也不能在類定義處初始化,只能通過構造函數初始化列表進行,並且必須有構造函數。
  • const 數據成員,只在某個對象生存期內是常量,而對於整個類而言卻是可變的。因爲類可以創建多個對象,不同的對象其 const 數據成員的值可以不同。所以不能在類的聲明中初始化 const 數據成員,因爲類的對象沒被創建時,編譯器不知道 const 數據成員的值是什麼。
  • const 數據成員的初始化只能在類的構造函數的初始化列表中進行。要想建立在整個類中都恆定的常量,應該用類中的枚舉常量來實現,或者 static const。
  • const 成員函數主要目的是防止成員函數修改對象的內容。即 const 成員函數不能修改成員變量的值,但可以訪問成員變量。當方法成員函數時,該函數只能是 const 成員函數。
  • static 成員函數主要目的是作爲類作用域的全局函數。不能訪問類的非靜態數據成員。類的靜態成員函數沒有 this 指針,這導致:1、不能直接存取類的非靜態成員變量,調用非靜態成員函數 2、不能被聲明爲 virtual

參考
C++ 中 const 關鍵字的使用方法

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