我从这个 FAQ条目中意识到,无法将指向成员函数的指针转换为/从void*.指向成员的原因不是内存地址,就像指向数据的指针一样!为什么这样?请帮我澄清一下.这不一定与成员函数,但任何正常的C函数,不是吗?
Mik*_*our 13
指向成员的指针不是内存地址,就像指向数据的指针一样!为什么这样?
指向成员函数的指针需要指示函数是否为虚函数,并允许虚拟调度(可能通过将索引指定到vtable中,而不是指定特定函数的地址),如果是这样的话.这使得它们比仅仅地址更复杂.
这不一定与成员函数,但任何正常的C函数,不是吗?
指向"普通"(非成员)函数的指针可以转换为对象指针,但不能移植.引用标准:
C++ 11 5.2.10/8有条件地支持将函数指针转换为对象指针类型,反之亦然.这种转换的意义是实现定义的,[...]
在许多平台上,(非成员)函数指针只是一个内存地址,转换是明确定义的.某些平台具有更多奇特的内存架构 - 例如,用于指令和数据的单独内存空间 - 并且可能不允许在这些平台上进行转换.