const
const可用來定義乙個常量。如:
const int i; // 定義乙個int型別的常量
int const i;//同上
const int * p; //定義乙個指向常量的指標,即不能通過指標修改這個指標指向的值(可以改變p,但不能改變*p)
int * const p; //定義乙個常量的值,即不能修改這個指標的指向,但可以修改其指向位址上所儲存的指(可以改變*p,但不能改變p)
const int * const p;`//*p不能修改,p也不能修改
const修飾成員函式時
當在乙個類中,const用來修飾成員函式時,const修飾的成員函式裡,不能修改任何成員變數,而且const修飾的成員函式裡,不能呼叫非const修飾的成員函式,以防非const修飾的成員函式改變了成員變數(呼叫的話會編譯錯誤),如:
class a
//普通的成員函式,為a賦值
void yy() const //const要寫在函式後面,寫在前面就成修飾函式返回值
};
const修飾成員變數時
在類中,const修飾成員變數時,不可以直接初始化,初始化必須在建構函式初始化列表中初始化,如:
class b
};
const修飾函式返回值時
const在修飾函式返回值時,函式傳遞出來的值(即返回值)應該也用const修飾的值來接,如:
const int yy()
int main()
關於const的記憶體分配
在c語言中,const常量就是唯讀常量,會為它分配記憶體空間,即有自己的儲存空間;
但在c++中,const常量不一定會為其分配記憶體。對於大多基本資料型別的常量,編譯器一般是將其放入符號表中,這樣是沒有為其分配記憶體的,在編譯過程中若發現使用常量則直接以符號表中的值替換。一下幾種情況是會為其分配儲存空間:
(1)const常量為全域性常量,且在其它檔案中被使用(即在其它檔案使用了extern將其呼叫)
(2)使用了&操作符取const常量的位址
(3)const定義的常量是未知的時候
const與define是有區別的
const常量是由編譯器處理的,而define是在預處理器處理的,即在編譯前的預編譯就將define定義的值進行了文字替換。
`
複習 C 之const成員
const int num 0 常量必須要初始化,而且不可修改。int num 100 const int p 在這兩句 後,p可以修改,p不可以修改。int num 100 int const p 在這兩句 後,p可以修改,p不可以修改。所以變數能不能修改看的是宣告時const後面的是什麼。con...
c語言複習筆記一
1 解釋語言與編譯語言,語言本身沒有這些分別,只是我們常用的到執行的這種型別 python是解釋型語言,不需要編譯 解釋就是借助乙個程式,那個程式能夠理解我的程式,並按照要求執行 c語言是編譯型語言 原始檔.c 預處理程式 cpp 得到.i 編譯程式 ccl 得到.s彙編原始檔 匯程式設計序得到.o...
c 複習之const修飾問題
const修飾問題主要分為四種情況 重點是看const在 的哪一邊 比如 int a 500 int b 100 const int c a 情況1 const在 的左邊,表明指標c指向的為常量,不可以通過指標c來改變c所指向的內容 但c可以改變指向的內容,如c b int const d a 情況...