1. The semantics of constructor
有4種情況會導致“編譯器必須為未聲明constructor之classes合成一個default constructor“。C++ 標準把那些合成物稱為implicit nontrivial default constructors。被合成出來的constructor只能滿足編譯器(而非程序)的需要。它之所以能夠完成任務,是借著“調用member object 或 base class 的default constructor“ 或是 ”為每一個object初始化其virtual function 機制或virtual base class機制“而完成。至于沒有存在那四種情況而又沒有聲明任何constructor的classes,我們說它們擁有的是implicit trivial default constructors,它們實際上并不會被合成出來。
在合成出來的default constructor中,只有base class subobjects 和member class objects會被初始化。所有其它的nonstatic data memeber,如整數(shù)、整數(shù)指針、整數(shù)數(shù)組等等都不會被初始化。這些初始化操作對程序而言或許有需要,但對編譯器則并非必要。
2. The semantics of copy constructor
有4種情況,一個class不展現(xiàn)出"bitwise copy semantics":
1) 當class內含一個member object而后者的class聲明有一個copy constructor時(不論是被class 設計者明確的聲明,還是被編譯器合成);
2) 當class繼承自一個base class而后者存在一個copy constructor時(再次強調,不論是被明確聲明還是被合成而得);
3) 當class聲明了一個或多個virtual functions時;
4) 當class派生自一個繼承串鏈,其中有一個或多個virtual base classes時。
前2種情況中,編譯器必須將member或base class的"copy constructors 調用操作"安插到被合成的copy constructor中。