定义
函数指针就是函数的首地址,而函数名也可以代表指向这个函数的指针。
静态成员函数指针
声明
typedef void (*STATICFUNC) (int a, int b);
定义
STATICFUNC = 函数名
非静态成员函数指针
声明
typedef bool(ClassName::*TestFunc)(int a);
定义
TestFunc = &ClassName:函数名。
多重继承时函数指针占用
包含了this指针的调整值。因为对于多重继承来说,如果类成员函数指针保存的是非最左基类的成员函数地址,根据C++标准,非最左基类实例的开始地址肯定不同于派生类实例的开始地址,所以需要调整this指针,使其指向非最左基类实例。
不同点
-
静态成员函数名可以作为左值,非静态成员函数名不能作为左值。
-
普通成员函数指针的大小是(32位系统4字节,64位系统8字节),但是成员函数指针不一定。
-
普通成员函数指针不需要标志“::* ”