2016-10-12 12 views
6

मैं निम्नलिखित कोड है:अंतर्निहित रूपांतरण और ऑपरेटर ओवरलोडिंग

struct helper { 
    template<typename T> helper(T const&); 
}; 

helper operator*(helper const&); 

struct A {}; 

int main() { 
    // (1) 
    A a; 
    sizeof(*a); 

    // (2) 
    int i; 
    sizeof(*i); 
} 

प्रकरण (1) ठीक संकलित करता है तथा मैं समझता हूँ कि यह helper प्रकार और दिए गए ऑपरेटर अधिभार के लिए अंतर्निहित रूपांतरण का उपयोग कर रहा है।

invalid type argument of unary '*' (have 'int') 

अंतर्निहित रूपांतरण प्रकार A लेकिन int के लिए नहीं करने के लिए क्यों प्रयोग किया जाता है:

मामले के लिए (2), हालांकि, मैं एक संकलक त्रुटि मिलती है?

उत्तर

8

जब कोई उपयोगकर्ता परिभाषित प्रकार शामिल नहीं होता है, तो किसी भी ऑपरेटर को अंतर्निहित ऑपरेटर माना जाता है। तो

helper operator*(helper const&); 

*i के लिए नहीं पाया जा सकता है जब i के अंतर्निहित प्रकार (जैसे int के रूप में) है।

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