1、const
a.可以用來定義常量、修飾函式引數、修飾函式返回值等三個作用。(編譯階段)
b.被const修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。
2、#define
#define是乙個巨集定義,可以定義乙個全域性變數,在整個檔案中都可以使用,它只是乙個字元替換操作,不做型別檢查,也不占用記憶體和執行時間。(預編譯階段)
3、二者的區別
a. const有型別檢查,define無型別檢查(最重要的)
define只是在預處理階段做個簡單的替換,而const在編譯執行階段是有嚴格的型別檢查的。
#define a 1
const
int a =
1;
b. const常量儲存於程式的資料段(存放程式中已初始化的全域性變數的一塊記憶體區域),而#define常量是在**段(用來存放程式執行**的一塊記憶體區域)。
c. const相對來說比較節約儲存空間
const在宣告的時候不會真正分配空間,編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為乙個編譯期間的常量,只有在第一次被引用的時候才會分配空間,而且只在記憶體中有乙個備份,而define展開一次就占用一些空間。
/*像int,char這些基礎型別,直接放到指令裡,即在指令記憶體裡。其它的應當在資料段裡,即 */
const
int i =4;
intfun()
d. 當然這兩個關鍵字各有不能替代的地方,但是在c++中,乙個原則就是盡量用const而不用define。 C const和 define的異同
const分配記憶體的時機是在編譯器編譯時期 include int main const和 define的相同之處 int main const和 define的區別 c 的const常量類似於巨集定義 const int c 5 define c 5 c 中的const常量與巨集定義不同 con...
關於C const限定符與define
const限定符修飾的常量無法修改,且在定義的時候必須同時初始化,否則error xcode平台 相比define,const指定的常量有型別,而define只是簡單的字元替換。const修飾的常量只能由const指標來指向,不能用乙個普通的指標指向乙個const修飾的常量 const int a ...
C const與函式過載
const 修飾函式有三種 constt foo bar constt const 1.修飾函式返回值 函式返回值不能作為區分函式過載的因素 2.修飾函式引數 如 void foo int void foo const int 如果以上這兩個函式是在乙個作用域內,函式過載失敗,編譯報錯。既,cons...