C/C++編程筆記:編譯器何時在C++中創(chuàng)建默認(rèn)值并復(fù)制構(gòu)造函數(shù)?
在C ++中,編譯器創(chuàng)建一個默認(rèn)的構(gòu)造函數(shù),如果我們不定義自己的構(gòu)造函數(shù)。編譯器創(chuàng)建的默認(rèn)構(gòu)造函數(shù)的主體為空,即,它不會為數(shù)據(jù)成員分配默認(rèn)值(在Java中,默認(rèn)構(gòu)造函數(shù)會分配默認(rèn)值)。

如果我們不編寫自己的副本構(gòu)造函數(shù),則編譯器還會創(chuàng)建一個副本構(gòu)造函數(shù)。與默認(rèn)構(gòu)造函數(shù)不同,編譯器創(chuàng)建的復(fù)制構(gòu)造函數(shù)的主體不為空,它會將傳遞的對象的所有數(shù)據(jù)成員復(fù)制到正在創(chuàng)建的對象中。
當(dāng)我們僅編寫副本構(gòu)造函數(shù)時會發(fā)生什么-編譯器會創(chuàng)建默認(rèn)構(gòu)造函數(shù)嗎?
如果我們編寫任何構(gòu)造函數(shù),即使它是復(fù)制構(gòu)造函數(shù),編譯器也不會創(chuàng)建默認(rèn)構(gòu)造函數(shù)。例如,以下程序無法編譯。
輸出:編譯器錯誤:沒有匹配的函數(shù)可以調(diào)用'Point :: Point()
反向怎么樣–當(dāng)我們編寫普通的構(gòu)造函數(shù)而不編寫副本構(gòu)造函數(shù)時會發(fā)生什么?
反向是不正確的。如果我們不編寫自己的副本,則編譯器會創(chuàng)建一個副本構(gòu)造函數(shù)。即使我們在類中編寫了其他構(gòu)造函數(shù),編譯器也會創(chuàng)建它。例如,下面的程序運(yùn)行正常。
輸出:
x = 10 y = 20
因此,我們需要寫的拷貝構(gòu)造函數(shù)。
以上就是今天的全部內(nèi)容了。每日分享小知識,希望對你有幫助~
另外如果你想更好的提升你的編程能力,學(xué)好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~
微信公眾號:C語言編程學(xué)習(xí)基地
分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!
