非静态成员的sizeof

在C++98中sizeof运算符只能作用于类的静态成员,或者对象的非静态成员,所以对于类的非静态成员,必须先构造一个对象,这是相当麻烦的。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 struct People {
 5     int hand;
 6     static People *all;
 7 };
 8 
 9 int main() {
10     People p;
11     cout << sizeof(p.hand) << endl;
12     cout << sizeof(People::all) << endl;
13     cout << sizeof(People::hand) << endl; // C++98中错误,C++11中通过
14 }

 

在C++98中,或许可能通过一些小技巧来让sizeof计算类的非静态成员变量,例如:

1 sizeof(((People*)0)->hand);

但是在C++ 11中就可以直接使用如下方式:

1 sizeof(People::hand)

 

posted @ 2013-10-25 10:05  lniwn  阅读(189)  评论(0编辑  收藏  举报