为什么&需要运算符来获取成员函数的地址,而不是全局函数?

时间:2015-11-19 08:08:21

标签: c++ pointers function-pointers member-function-pointers

以下代码运行良好

#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;成员函数需要运算符吗?

1 个答案:

答案 0 :(得分:2)

函数类型T的左值可以隐式转换为T*[conv.func]/4.3),但成员函数没有类似的规则。

我不确定这背后的原因是什么,所以我想我的答案是&#34;标准是这样说的#34;。也许是因为成员函数指针不经常使用,所以强制要求额外的实现细节是不必要的。