C 11 非靜態成員的sizeof

2022-06-02 10:45:09 字數 829 閱讀 5882

非靜態成員變數的sizeof

從c語言被發明開始,sizeof就是乙個運算子,也是c語言中除了加減乘除以外為數不多的特殊運算子之一。

而在c++引入類(class)型別之後,sizeof的定義也隨之進行了拓展。

不過在c++98標準中,對非靜態成員變數使用sizeof是不能夠通過編譯的。

如下示例:

1 #include 2

using

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...