非靜態成員變數的sizeof
從c語言被發明開始,sizeof就是乙個運算子,也是c語言中除了加減乘除以外為數不多的特殊運算子之一。
而在c++引入類(class)型別之後,sizeof的定義也隨之進行了拓展。
不過在c++98標準中,對非靜態成員變數使用sizeof是不能夠通過編譯的。
如下示例:
1 #include 2using
namespace
std; 34
struct
people5;
1011
intmain()
12
尤其注意最後乙個sizeof操作。
在c++11中,對非靜態成員變數使用sizeof操作是合法的。
而在c++98中,只有靜態成員,或者物件的例項才能對其成員進行sizeof操作。
因此如果讀者只有乙個支援c++98標準的編譯器,在沒有定義類例項的時候,要獲得類成員的大小,以前通常會採用以下的**:
sizeof(((people*)0)->hand);
強制轉換0為乙個people類的指標,繼而通過指標的解引用獲得其成員變數,並用sizeof求得該成員變數的大小。
而在c++11中,我們無需這樣的技巧,因為sizeof可以作用的表示式包括了類成員表示式。如下**:
sizeof(people::hand);
可以看到,無論從**的可讀性還是編寫的便利性,c++11的規則都比強制指標轉換的方案更勝一籌。
good good study, day day up.
順序 選擇 迴圈 總結
c 11類的靜態成員
一 類靜態成員和類成員之間的區別 1.靜態成員在類的所有物件中是唯一且共享的。2.靜態成員即使在類物件不存在的情況下也能使用。靜態成員只要使用類名加範圍解析運算子 就可以訪問。3.靜態成員分為靜態成員函式和靜態成員變數。4.靜態成員可以使用或訪問其他靜態成員。靜態成員不能使用或訪問該類的非靜態成員即...
C 靜態成員和非靜態成員
一 c 靜態成員和非靜態成員 1.c 靜態成員和非靜態成員 當類中的某個成員使用static修飾符時,就會被宣告為靜態成員。類中的成員要麼是靜態成員,要麼是非靜態成員。一般情況下,靜態成員屬於整個類所有,被該類的所有例項所共享。而非靜態成員則屬於類的例項 物件所有,只被該例項所共享。因此,對於類的靜...
C 中靜態成員與非靜態成員
靜態成員和非靜態成員 若將類中的某個成員宣告為 static 該成員稱為靜態成員,類中的成員要麼是靜態,要麼是非靜態的。一般說來靜態成員是屬於類所有的,非靜態成員則屬於類的例項。以下示例 演示了如何宣告靜態和非靜態成員。using system class test static void g st...