4個bytes用來存放指針,什么指針?指向virtual base class subobject的指針呀.
一個同class X一樣的char.它占了1 個bytes.
然后受到Alignment的限制,所以填補了3個bytes.
4+1+3=8
不過需要注重的是不同的編譯器Y和Z大小的結果也會不同.因為新的編譯器會將一個空的virtual base class看做是派生類對象的開頭部分,因此派生類有了member,因此也就不必分配char的那一個bytes.也就用不到填補的3個bytes,因此有可能在某些編譯器中,class Y和class Z的大小為4.
最后看看A.根據我們對class Y的分析可以得出以下算式:
4+4+1+3=12;
不是我們想象的16,而是12.假如換成我們上面說的新的編譯器來編譯,結果很有可能是8.
雷神1、4、8……的說了一堆,也不知大家明白與否,但是這第三章,讀起來確實比前兩章順多了。我們繼續我們來看Data Member 的Binding,現在我們對數據成員的綁定只需要記住一個防御性風格:始終把嵌套類型的聲明放在class的開始部分,這樣做可以確保非直覺綁定的正確性??聪旅娴囊粋€例子:
通過這一章我還知道了。數據成員的布局。數據成員的存取。并且對Static data members有了進一步的了解,在class的生命周期中,靜態成員被看作是全局變量,每一個member的存取不會導致任何空間或效率上的額外負擔。不論是從一個復雜的繼續關系中繼續還是直接聲明的,Static data member都只會有一個實體。并且有著非常直接的存取路徑。另外假如兩個類都聲明了一個相同名字的靜態成員變量,那么編譯器會通過一種算法,為我們解決名字沖突的問題。而非靜態的成員變量的存去實際上是通過implicit class object(this指針)來完成的。例如