使用c++語言進行程式開發時,變數的初始化貫穿於始終:陣列、指標、容器、物件等等都需要初始化,沒有初始化而被使用或初始化出現問題,整個程式將出現很多意想不到的錯誤。
初始化變數的形式有兩種:賦值初始化、直接初始化。
例如:int ivar(1024); //直接初始化
int ivar = 1024; //賦值初始化
這裡應該注意一點區別:初始化不是賦值。
一般情況下,直接初始化更靈活,效率更高。
c++為了滿足開發需要,對某些型別提供了多個初始化方式,其中對於類這種型別來說,多種初始化源於其本身的各種建構函式的不同。當然對於c++內建型別來說,賦值初始化與直接初始化幾乎沒有差別。
由於建構函式是一種特殊的函式,它接受不同的引數,因此,根據其不同的形式,初始化的形式也有多種。
例如:string類
string
svar("c++ study");
//直接初始化
string svar = "c++ study"; //賦值初始化
string
svar(10,'c'); //svar = "cccccccccc"
2.1 內建型別變數的初始化
對於內建型別變數的初始化,有一條重要的規則:
在函式體外部定義的變數都自動初始化為0,在函式體內部系統不自動為其初始化。
對於最佳的實踐方案是:每個內建型別的物件都要初始化。
例如:int
ivar;
//在函式體外,ivar被預設初始化為0。
int
getvar1()
int
getvar2()
intmain(int argc, char *argv)
2.2 類型別變數的初始化
如果定義某個類時,如果沒有提供初始化方式,則會呼叫預設建構函式對其進行初始化。
由於其本身的性質原因,當類物件被定義時,
不管在函式體內部還是外部,預設建構函式都將被呼叫。
大多數類都提供了預設建構函式。如果某些類沒有提供預設建構函式,那麼,每個定義都必須提供顯示的初始化形式。
例如:string
svar;
//在函式體外,svar被預設初始化為""。
void
getvar()
intmain(int argc, char *argv)
陣列、指標、容器、物件以及const和static的初始化要到各自的章節才具體介紹,不過,大體的初始化規則還是一致的。
C 初始化變數
1.初始化變數 int i1 7.2 正確,但是i1的值變為了7 int i 建議使用初始值列表 int i2 錯誤 初始值列表確保不會發生某些可能導致資訊丟失的型別轉換 int i3 錯誤 同上,且 是多餘的 2.使用auto關鍵字 struct record auto p new record ...
變數初始化
int a 是變數定義,也就是說編譯器將為a分配儲存,這在編譯時被處理。int a 0 是定義 初始化,定義的分配儲存的action在編譯時完成,初始化的action則在執行時完成 將執行類似dword ptr ebp 4 0的指令,而單獨的int a 不會有對應的執行指令 定義是分配空間,而初始化...
c 變數初始化 猜想
全域性的 名字空間的 靜態的物件會被自動初始化適當型別的0。堆,容器中和類的顯式空建構函式的物件會被呼叫其建構函式初始化,但並不會被初始化為相應的0,沒有陣列 如 char ch 10 for int i 0 i 10 i cout int ch i 結構和類成員的初始化 談到結構和類成員,除非提供...