在C++98标准中,对非静态成员变量使用sizeof是不能够通过编译的。
写段代码来说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// 梁笔记 // https://zouzhongliang.com #include <iostream> using namespace std; class Test { public: Test(){} int ival; static Test* cout; }; int main() { Test p; cout<< sizeof(p.ival) <<endl; //C++98/C++11通过编译 cout<< sizeof(Test::cout) <<endl; //C++98/C++11通过编译 cout<< sizeof(Test::ival) <<endl; //C++98中错误 C++11通过编译 } |
可以注意到最后一个sizeof操作。C++11中对非静态成员变量使用sizeof是正确的,但C++98中非静态成员变量使用sizeof是错误的。
如果C++98中要获取非静态成员变量的大小,可以用0强制转换成指针,再用指针来指成员变量,方可获取
1 |
sizeof( ((Test*)0)->ival); |
从以上代码可以看出与C++11方法的可读性和便利性都没办法比。
所以用C++11? sizeof获取非静态成员比C++98中方便很多。