C/C++中的const ,static
一、const
在C++中:
1、常對象:創建對象時添加const關鍵字,這個對象就不可以再修改,就有了常屬性,就意味著整個對象所有變量不能更改
2、常對象不能調用普通函數,調用成員函數就相當於把對象的this指針給了他,就有被修改的風險
3、常對象只能調用常函數(函數體前加關鍵字叫常函數),普通對象也能調用常函數,常函數就相當於對this指針添加了const屬性
4、常函數與普通函數可以構成重載,不會沖突
5、如果有成員確實需要修改,他又被const修飾,可以對成員添加一個關鍵字mutable,這樣即使是常對象調用了常函數依然可以修改成員
C:
const :常量,為變量保存添加一種保護,保護變量不能被顯示修改,提高程序的安全性,當程序沒必要修改參數值時,應該加const屬性;
const 可以定義常量,const修改初始化過的全局變量就是常量;
二、static
C++:靜態成員與靜態成員函數
1、類成員被static修飾,就會存儲在bss段(此段是由編譯器存放的而且大小是固定的),在程序中動態的創建對象時它的靜態成員就無法創建,所有的類對象就共享一個靜態成員
2、靜態成員只能在類中聲明不能在類中定義(必須在類外定義) 類型 類名::靜態成員名
3、靜態成員就是聲明在類中的全局變量,在任何位置都可以使用 類名::靜態成員名 進行訪問
4、靜態成員函數:類中的成員函數被static修飾後就變成靜態成員函數,所有成員共享一份靜態成員函數
5、靜態成員函數不會傳遞this指針,不通過對象也能調用靜態成員函數 類名::靜態成員函數(參數)
C:
static
修飾全局變量時,作用域會從整個程序變為他所在的.c文件內;
1、靜態局部,塊:
存儲位置會由棧改為靜態段;生命周期會改為從定義開始到程序結束;但是使用範圍不變;默認值為0;只能初始化一次;
靜態函數:
static int func(int num);
static會把外部函數變為內存函數,只能在他所在的.c文件內;
static修飾全局變量和函數的好處,可以防治與其他函數,變量重名沖突
C/C++中的const ,static