1. The semantics of construction
有4種情況會(huì)導(dǎo)致“編譯器必須為未聲明constructor之classes合成一個(gè)default constructor“。C++ 標(biāo)準(zhǔn)把那些合成物稱為implicit nontrivial default constructors。被合成出來的constructor只能滿足編譯器(而非程序)的需要。它之所以能夠完成任務(wù),是借著“調(diào)用member object 或 base class 的default constructor“ 或是 ”為每一個(gè)object初始化其virtual function 機(jī)制或virtual base class機(jī)制“而完成。至于沒有存在那四種情況而又沒有聲明任何constructor的classes,我們說它們擁有的是implicit trivial default constructors,它們實(shí)際上并不會(huì)被合成出來。
在合成出來的default constructor中,只有base class subobjects 和member class objects會(huì)被初始化。所有其它的nonstatic data memeber,如整數(shù)、整數(shù)指針、整數(shù)數(shù)組等等都不會(huì)被初始化。這些初始化操作對程序而言或許有需要,但對編譯器則并非必要。