天天看點

《深入了解C++11:C++ 11新特性解析與應用》——2.8 非靜态成員的sizeof

類别:部分人

從c語言被發明開始,sizeof就是一個運算符,也是c語言中除了加減乘除以外為數不多的特殊運算符之一。而在c++引入類(class)類型之後,sizeof的定義也随之進行了拓展。不過在c++98标準中,對非靜态成員變量使用sizeof是不能夠通過編譯的。我們可以看看下面的例子,如代碼清單2-18所示。

《深入了解C++11:C++ 11新特性解析與應用》——2.8 非靜态成員的sizeof
《深入了解C++11:C++ 11新特性解析與應用》——2.8 非靜态成員的sizeof

注意最後一個sizeof操作。在c++11中,對非靜态成員變量使用sizeof操作是合法的。而在c++98中,隻有靜态成員,或者對象的執行個體才能對其成員進行sizeof操作。是以如果讀者隻有一個支援c++98标準的編譯器,在沒有定義類執行個體的時候,要獲得類成員的大小,我們通常會采用以下的代碼:

這裡我們強制轉換0為一個people類的指針,繼而通過指針的解引用獲得其成員變量,并用sizeof求得該成員變量的大小。而在c++11中,我們無需這樣的技巧,因為sizeof可以作用的表達式包括了類成員表達式。

可以看到,無論從代碼的可讀性還是編寫的便利性,c++11的規則都比強制指針轉換的方案更勝一籌。

繼續閱讀