C 中的初始化

2021-08-21 20:02:25 字數 1377 閱讀 7475

這裡概括性的討論了c++中的初始化規則,一些具體型別還需單獨討論。

1、當物件在建立時獲得了乙個特定的值,我們說這個物件被初始化了。用於初始化變數的值可以是任意複雜的表示式。

2、初始化不是賦值,初始化的含義是建立變數時賦予其乙個初始值,而賦值的含義是把物件的當前值擦除,以乙個新值來代替。

3、初始化可分為直接初始化和拷貝初始化:

3.1、若使用=初始化乙個變數,則執行的是拷貝初始化,編譯器把等號右側的初始值拷貝到新建立的物件中去。

int i=0;

3.2、如果不使用等號,則執行的是直接初始化。

int i(0);

3.2.1、當初始值只有乙個時,使用直接初始化和拷貝初始化都行。若初始化要用到的值有多個,一般只能使用直接初始化。(如果非要非要用拷貝初始化的方式初始化需多個值進行初始化的物件,就需要顯式的用直接初始化方式建立乙個臨時物件用於拷貝。)

3.2.2某些類型別可能存在特殊的直接初始化方式,具體將在針對於某個類型別的文章中介紹。

4、列表初始化(c++11):無論是初始化物件還是某些時候為物件賦新值,都可以使用花括號將初始值括起來進行初始化。此時等號大部分情況下都可有可無,這一點區別於c語言。

int i;//初始化

int ii=;//初始化

int j=1;

j=;//賦值

4.1、使用列表初始化且初始值存在丟失資訊的風險,編譯器將報錯

long double pi;

int i;//錯誤:轉換為執行,因為存在資訊丟失風險

int j=pi;//正確:轉換執行且確實丟失了資訊

4.2、當初始值有多個時,可以通過逗號將不同的初始值隔開。

vectorv;

5、預設值初始化:

5.1、如果定義變數時沒有指定初值,則變數被預設初始化。

5.2、預設值取決於變數的型別,同時定義變數的位置也會對此有影響。

5.2.1、如果是內建型別的變數未被顯式初始化,它的值由定義的位置決定。

定於與任何函式體之外的變數被初始化為0。

定義在函式體內部的內建變數將不被初始化,此時它為未知值。

5.2.2、每個類各自決定其初始化物件的方式。而且是否允許不經初始化就定義物件也由類自己決定。如果類允許這種行為,它將決定物件的初始值是什麼。若果不支援這種行為,預設值初始化則會引發錯誤。絕大多數類都支援無需顯示初始化而定義物件,這樣的類提供了乙個合適的預設值。如string類規定如果沒有指定初始值則生成乙個空串。

6、最後需要特別強調的是:在使用直接初始化和拷貝初始化時,只能在相同型別之間進行。當我們使用字面量初始化物件時必須保證字面量支援轉換成與物件相同的型別。

c 中的初始化

當物件建立是就獲得了乙個特定的值,我們就說這個物件被初始化了。c 物件初始化通常有4種形式,但並非每種風格都支援所有型別,下面是對各種風格的總結。通常初始化的4種形式 int units solds 0 int units solds 0 int units solds int units sold...

C 中陣列初始化

include using std cout using std endl int arr1 5 int arr2 5 int main int pi1 new int 5 int pi2 new int 5 for int i 0 i 5 i cout arr1 i cout endl for i...

C 中DataRow的初始化

在程式中經常使用datarow來儲存一些資料,完成傳值的操作,這時形成一些datarow的物件,可是用list或datable將其組織起來。那麼如何初始化這乙個datarow呢?我們知道,datarow是datatable的元件,而且在msdn上可以看到datarow的建構函式是protected型...