在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)