ISO C 标准并不要求函数指针可以来回转换为数据指针。事实上,ISO C 标准并不要求 void * 类型的对象可以保存指向函数的指针。但是,支持 XSI 扩展的实现要求 void * 类型的对象可以保存指向函数的指针。但是,将指向函数的指针转换为指向另一种数据类型(void * 除外)的指针的结果仍未定义。请注意,如果试图从 void * 指针转换为函数指针,符合 ISO C 标准的编译器必须生成一个警告,如下所示:
class Base1 { int b1; void Base1Method(); };
class Base2 { int b2; void Base2Method(); };
class Derived : public Base1, Base2 { int d; void DerivedMethod(); };
现在有两个可能的 this指针。
指向 Base1的成员函数的指针可用作指向
成员函数,因为它们都使用相同的 this
但是不能使用指向 Base2的成员函数的指针
As-is 作为指向 Derived的成员函数的指针,因为 this
指针需要调整。