5
struct A 
{ 
    void f() {} 
}; 

void f() {} 

int main() 
{ 
    auto p1 = &f;  // ok 
    auto p2 = f;  // ok 
    auto p3 = &A::f; // ok 

    // 
    // error : call to non-static member function 
    // without an object argument 
    // 
    auto p4 = A::f; // Why not ok? 
} 

为什么我必须使用address-of运算符来获取指向成员函数的指针?为什么我必须使用address-of运算符来获取指向成员函数的指针?

+0

你想在这里做什么?为什么你需要一个成员函数的地址,如果你确实有这样的事情,你会怎么做呢? – tadman

+0

例如'std :: bind(&A :: f,A());' – xmllmx

+1

同时将成员函数传递给'std :: thread'。 –

回答

3
auto p1 = &f;  // ok 
auto p2 = f;  // ok 

第一个或多或少是正确的。但由于非成员函数指针指向implicit conversions,所以&不是必需的。 C++进行该转换,与applies相同,以静态成员函数。

要从cppreference引述如下:

功能类型T的左值可以是隐式转换到prvalue 指针指向功能。这不适用于非静态成员 函数,因为引用非静态成员函数的左值 不存在。