以下代码运行良好
#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;
}
为什么&amp;成员函数需要运算符吗?
答案 0 :(得分:2)
函数类型T
的左值可以隐式转换为T*
([conv.func]/4.3
),但成员函数没有类似的规则。
我不确定这背后的原因是什么,所以我想我的答案是&#34;标准是这样说的#34;。也许是因为成员函数指针不经常使用,所以强制要求额外的实现细节是不必要的。