新聞中心
缺省初始化這是個(gè)基礎(chǔ)問(wèn)題,但往往有些迷惑,尤其是當(dāng)你同一個(gè)時(shí)間有時(shí)寫(xiě)Java,有時(shí)寫(xiě)C++ ,總結(jié)如下:

創(chuàng)新互聯(lián)公司專(zhuān)業(yè)為企業(yè)提供甘泉網(wǎng)站建設(shè)、甘泉做網(wǎng)站、甘泉網(wǎng)站設(shè)計(jì)、甘泉網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、甘泉企業(yè)網(wǎng)站模板建站服務(wù),十載甘泉做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
C++中基本類(lèi)型只有作為全局變量才會(huì)進(jìn)行,而對(duì)于類(lèi)類(lèi)型只要這個(gè)類(lèi)具有一個(gè)無(wú)參構(gòu)造函數(shù)則不管這個(gè)類(lèi)的對(duì)象是局部變量還是全局變量,它都會(huì)進(jìn)行缺省的初始化,甚至當(dāng)一個(gè)對(duì)象通過(guò)缺省初始化機(jī)制進(jìn)行創(chuàng)建時(shí),這個(gè)對(duì)象的類(lèi)類(lèi)型數(shù)據(jù)成員也會(huì)根據(jù)它們自己的無(wú)參構(gòu)造函數(shù)進(jìn)行缺省的初始化。
但是若該類(lèi)沒(méi)有無(wú)參構(gòu)造函數(shù),那么若這個(gè)類(lèi)沒(méi)有任何構(gòu)造函數(shù),系統(tǒng)將會(huì)為這個(gè)類(lèi)提供一個(gè)缺省的無(wú)參構(gòu)造函數(shù),理論上這個(gè)構(gòu)造函數(shù)會(huì)講這個(gè)類(lèi)的每個(gè)數(shù)據(jù)成員初始化為釋放類(lèi)型的0,但是這因編譯器而異,我們***不要有依賴(lài),系統(tǒng)提供的缺省無(wú)參構(gòu)造函數(shù)完全有可能只進(jìn)行內(nèi)存分配而不進(jìn)行初始化;
若還有其他構(gòu)造函數(shù),則系統(tǒng)不會(huì)提供無(wú)參構(gòu)造函數(shù),此時(shí)編譯器編譯不通過(guò),對(duì)于這種情況在實(shí)際編程中我們可以對(duì)其他構(gòu)造函數(shù)之一的所有參數(shù)進(jìn)行缺省賦值來(lái)彌補(bǔ)。
系統(tǒng)不會(huì)提供無(wú)參構(gòu)造函數(shù)的另外一個(gè)情況是:一個(gè)類(lèi)包含了未初始化的const或引用成員,在這種情況下,我們別無(wú)選擇,職能顯式的進(jìn)行初始化。注意,此時(shí)不能在類(lèi)的內(nèi)部進(jìn)行初始化,其實(shí)在C++中未有static const類(lèi)型的數(shù)據(jù)成員可以進(jìn)行類(lèi)內(nèi)部初始化,除此以外數(shù)據(jù)成員都不能在類(lèi)內(nèi)部進(jìn)行初始化,但Java并沒(méi)有這些限制。
對(duì)于這個(gè)問(wèn)題,Java就有一個(gè)準(zhǔn)則,那就是當(dāng)一個(gè)變量被定義時(shí)(而不是只聲明不定義--當(dāng)然,這種情況只有一個(gè):變量在一個(gè)函數(shù)內(nèi)部初次出現(xiàn),且沒(méi)有提供初始值時(shí)),它總是缺省的初始化為適當(dāng)類(lèi)型的0(除非這個(gè)變量已經(jīng)在類(lèi)定義中有初始值了——再次注意這個(gè)在C++中是不可行的)。但和C++不同,Java的一個(gè)對(duì)象中類(lèi)類(lèi)型數(shù)據(jù)成員的引用不會(huì)使用無(wú)參構(gòu)造函數(shù)進(jìn)行缺省的初始化,而是簡(jiǎn)單的置為null。
***,要注意的是Java不允許我們?yōu)橐粋€(gè)函數(shù)的參數(shù)提供缺省值,因?yàn)槲覀冊(cè)貱++中通過(guò)給一個(gè)常規(guī)的構(gòu)造函數(shù)參數(shù)提供缺省值來(lái)達(dá)到無(wú)參構(gòu)造函數(shù)的方法在Java中無(wú)法使用。
對(duì)于數(shù)組,C++的缺省初始化規(guī)則如下:
基本類(lèi)型的數(shù)組,若為全局作用域則被缺省初始化為適當(dāng)類(lèi)型的0,若為局部作用域則不會(huì)被缺省初始化。
類(lèi)類(lèi)型的數(shù)組,若作為數(shù)組元素的類(lèi)沒(méi)有一個(gè)無(wú)參構(gòu)造函數(shù)(此時(shí)定義了一個(gè)或多個(gè)其他的構(gòu)造函數(shù),系統(tǒng)因此也不會(huì)提供缺省無(wú)參構(gòu)造函數(shù)了),則該數(shù)組無(wú)法聲明;若有一個(gè)程序員顯式提供的無(wú)參構(gòu)造函數(shù)則會(huì)進(jìn)行初始化;若有一個(gè)系統(tǒng)提供的隱式無(wú)參缺省初始化構(gòu)造函數(shù)則在全局作用域上才會(huì)初始化。
而在Java中C++的數(shù)組初始化問(wèn)題是不存在的,數(shù)組的各個(gè)元素都會(huì)自動(dòng)進(jìn)行初始化,類(lèi)類(lèi)型對(duì)象的數(shù)組元素將初始化為null。
當(dāng)前名稱(chēng):C++和Java的缺省初始化問(wèn)題
URL網(wǎng)址:http://www.5511xx.com/article/dpigdid.html


咨詢
建站咨詢
