const 用法
const ‘隻讀’
在C語言中,const 為隻讀修飾,其實是可以改變的量
-
const int maxn=10;
-
int array[maxn]; //error 錯誤,maxn仍是變量
C++
常量無位址概念,以’符号表‘形式;
-
key=a; value=1;
const int a=10;
// int *b=&a; [Error] invalid conversion from 'const int*' to 'int*' [-fpermissive]
int *b=(int*)&a;
//如果對常量取位址,編譯器會臨時開辟一空間(無法改變到a),讓這個指針存放這臨時空間的位址
幾種形式const
const int a;
int const b; //等價
const int* c; //常量指針
int * const d; //指針常量
const int * const e;
- 頂層 const
- const 指針
- const 引用
- const 函數體
- const { } 定義于函數體前
常量成員函數
定義格式; string myclass::sstring const { }
聲明格式; string myclass::sstring const ;
2.void function()const;
define 與const對比
- #define定義的宏是在預處理階段進行替換的,const常量是在編譯、運作階段進行使用的(const 定義的常量依然是内置類型)。
- define的替換注意是僅僅的字元串替換,并不會檢查其合法性。
- 預處理階段做了的任務:
1:将頭檔案中的内容(源檔案之外的檔案)插入到源檔案中
2:進行了宏替換的過程(簡單的字元串替換),定義和替換了由#define指令定義的符号
3:删除掉注釋的過程,注釋是不會帶入到編譯階段
-
條件編譯
所有的宏替換隻是簡單的字元串替換,注意是字元串替換,是以并不會檢查其合法性,而const定義的常量依然是内置類型等,是以會對其進行類型安全檢查。
宏定義在程式中使用了幾次在預處理階段就會被展開幾次,并不會增加記憶體占用,但是宏定義每展開一次,代碼的長度就要發生變化,而const常量也會為其配置設定記憶體。
而define定義的變量在記憶體中并沒有拷貝,因為所有的預處理指令都在預處理時進行了替換。