C 徹底研究之變數初始化

2021-05-01 10:50:20 字數 1357 閱讀 9274

使用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 結構和類成員的初始化 談到結構和類成員,除非提供...