非静态成员的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)
原文地址:https://www.cnblogs.com/lniwn/p/3387378.html