【发布时间】:2015-11-19 08:08:21
【问题描述】:
以下代码运行良好
#include <iostream>
using namespace std;
void fun()
{
cout<<"having some fun";
}
typedef void (*funptr)();
int main() {
// your code goes here
funptr p=fun;
p();
return 0;
}
这个不行。
#include <iostream>
using namespace std;
class myclass
{
public:
void fun()
{
cout<<endl<<"having fun inside myclass"<<endl;
}
};
typedef void (myclass::*funptr)();
int main() {
// your code goes here
funptr p=myclass::fun; //THIS DOESN'T WORK. WHY?
myclass m;
(m.*p)();
return 0;
}
为什么成员函数需要 & 运算符?
【问题讨论】:
-
复制自link
-
这与指向数据成员的指针的工作方式是一致的。函数名到函数指针的隐式转换就像数组名到指针(到第一个元素)的隐式转换。它是从 C 继承的一个特性。使指向成员的指针(无论是否为函数)使用相同类型的东西会弄乱允许派生类访问其基类成员以及访问命名空间成员的语法。
标签: c++ pointers function-pointers member-function-pointers