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