C++11新特性- 使用=default生成默認(rèn)構(gòu)造函數(shù)
從C++基本知識(shí)說(shuō)起
先看下面代碼:
struct?Point{
????int?x;
????int?y;
};代碼內(nèi)容很簡(jiǎn)單,定義了一個(gè)包含成員x,y的類(lèi)Point。在需要的地方可以使用這個(gè)類(lèi):
????Point?pt; ????pt.x?=?10; ????pt.y?=?10;
雖然我們并沒(méi)用定義Point類(lèi)的構(gòu)造函數(shù),我們依然可以定義Point類(lèi)的pt對(duì)象并使用它,其原因是編譯器會(huì)自動(dòng)生成一個(gè)缺省的的構(gòu)造函數(shù)。其效果大致相當(dāng)于:
struct?Point{
????Point(){}
????int?x;
????int?y;
};一切看起來(lái)是那么的美好,但是一旦因?yàn)槠渌蛱砑恿似渌袇?shù)的構(gòu)造函數(shù),編譯器就不再生成缺省的構(gòu)造函數(shù)了。
C++11的解決方案
C++11允許我們使用=default來(lái)要求編譯器生成一個(gè)默認(rèn)構(gòu)造函數(shù):
struct?Point{????
????Point()=default;
????Point(int?_x,?int?_y):x(_x),y(_y){}
????int?x?=?0;
????int?y?=?0;
};這樣,我們就可以繼續(xù)我們的美好生活了。
如果是自己編寫(xiě)的無(wú)參構(gòu)造函數(shù)的話(huà),就需要指定成員的構(gòu)造方式。默認(rèn)構(gòu)造函數(shù)會(huì)對(duì)數(shù)據(jù)成員進(jìn)行默認(rèn)初始化,所以就不需要另外指定了。這樣可以省去一些麻煩。
由于整數(shù)是內(nèi)置類(lèi)型,而整數(shù)成員的默認(rèn)初始化是不初始化,所以本例中的x,y還是需要類(lèi)內(nèi)初始化。這時(shí)另一個(gè)話(huà)題。
作者觀點(diǎn)
C++的語(yǔ)法很?chē)?yán)密,就好像經(jīng)過(guò)理論推演一樣。





