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? 
} 

मुझे किसी सदस्य फ़ंक्शन में पॉइंटर प्राप्त करने के लिए ऑपरेटर के पते का उपयोग क्यों करना चाहिए?सदस्य फ़ंक्शन को पॉइंटर प्राप्त करने के लिए मुझे ऑपरेटर के पते का उपयोग क्यों करना चाहिए?

+0

आप यहां क्या करने की कोशिश कर रहे हैं? आपको सदस्य फ़ंक्शन के पते की आवश्यकता क्यों होगी, और यदि आपके पास ऐसी कोई चीज़ है, तो आप इसके साथ क्या करेंगे? – tadman

+0

उदा। 'std :: bind (& A :: f, ए());' – xmllmx

+1

जब भी सदस्य कार्य को 'std :: thread' में पास किया जाता है। –

उत्तर

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

पहला सही चीज़ सही या कम है। लेकिन क्योंकि गैर-सदस्य कार्यों में implicit conversions पॉइंटर्स हैं, & आवश्यक नहीं है। सी ++ उस रूपांतरण को बनाता है, स्थिर सदस्य कार्यों के लिए applies

cppreference से उद्धृत करने के लिए:

समारोह प्रकार T का एक lvalue हो सकता है परोक्ष कि कार्य करने के लिए एक prvalue सूचक को बदल दिया। यह गैर स्थैतिक सदस्य फ़ंक्शंस पर लागू नहीं होता है क्योंकि गैर-स्थैतिक सदस्य फ़ंक्शंस को संदर्भित करने वाले लाभा मौजूद नहीं हैं।

संबंधित मुद्दे