C++中静态成员函数和普通成员函数存储方式相同

先从一个示例查看类的创建过程中,静态成员函数和普通成员函数的存储区别。

 1 #include "stdafx.h"
 2 #include<iostream>
 3 #include<string.h>
 4 
 5 using namespace std;
 6 
 7 class Test 
 8 {
 9     public:
10         static int a;
11         void func1() 
12         {
13             cout << "类的地址:" <<this << endl;
14         };
15         static void func2() 
16         {
17         };
18 };
19 int Test::a=1;
20 
21 int main() {
22     printf( "普通成员函数的地址:%X
", &Test::func1);
23     printf( "静态成员函数的地址:%X
", &Test::func2);
24     Test test;
25     Test test2;
26     test.func1();
27     cout << "静态成员变量a的地址:" << &(test.a)<<endl;
28     printf( "%X
", &Test::func1);
29     cout << &test.func2 << endl;
30     cout << &test2.func2 << endl;
31     system("pause");
32     return 0;
33 }

运行结果:

可以看出类在定义后就会给成员函数(包括静态和动态)分配”存储空间“,当然静态成员变量也会分配。在初始化对象时,这个地址也不会再改变了。

对应为什么需要使用:printf( "普通成员函数的地址:%X ", &Test::func1); 获取静态函数的地址,可以参考:https://blog.csdn.net/zzhays/article/details/8036098

原文地址:https://www.cnblogs.com/skytcat/p/11339793.html