2012-03-16 14 views
7

में श्री केनी Kerr के this column, वह एक struct और इस तरह एक typedef परिभाषित:इस टाइपपीफ का अर्थ क्या है?

struct boolean_struct { int member; }; 
typedef int boolean_struct::* boolean_type; 

फिर इस typedef का अर्थ क्या है?

operator boolean_type() const throw() 
{ 
    return Traits::invalid() != m_value ? &boolean_struct::member : nullptr; 
} 

की "& boolean_struct :: सदस्य" का क्या मतलब है:

एक और सवाल के लिए निम्न कोड के विषय में है?

struct boolean_struct { int member; };  
typedef int boolean_struct::* boolean_type;  

फिर इस typedef का अर्थ क्या है:

उत्तर

13

श्री केनी Kerr के इस स्तंभ में, वह एक struct और इस तरह एक typedef परिभाषित?

typedef एक प्रकार boolean_type कहा जाता है जो एक boolean_struct ऑब्जेक्ट के अंदर एक int सदस्य के लिए एक सूचक के बराबर है बनाता है।

यह int पर सूचक के लिए एक ही बात है। अंतर यह है कि boolean_type की एक वस्तु को इसे हटाने के लिए boolean_struct ऑब्जेक्ट की आवश्यकता होती है। int पर एक सामान्य सूचक नहीं है। कुछ कोड उदाहरणों के माध्यम से यह अलग-अलग तरीका देखने का सबसे अच्छा तरीका है।

int रों को केवल सामान्य संकेत पर विचार करें:

struct boolean_struct { int member; }; 
typedef int boolean_struct::* boolean_type; 

int main() 
{ 

    // Two boolean_struct objects called bs1 and bs2 respectively: 
    boolean_struct bs1; 
    boolean_struct bs2; 
    // Initialize each to have a unique value for member: 
    bs1.member = 7; 
    bs2.member = 14; 

    // Obtaining a pointer to an int member inside a boolean_struct 
    boolean_type pibs = &boolean_struct::member; 

    // Note that in order to dereference it I need a boolean_struct object (bs1): 
    int value3 = bs1.*pibs; 
    // value3 now has value 7. 

    // I can use the same pibs variable to get the value of member from a 
    // different boolean_struct (bs2): 
    int value4 = bs2.*pibs; 
    // value4 now has value 14. 

    return 0; 
} 

आप देख सकते हैं, वाक्य रचना और उनके व्यवहार कर रहे हैं:

struct boolean_struct { int member; }; 

int main() 
{ 
    // Two boolean_struct objects called bs1 and bs2 respectively: 
    boolean_struct bs1; 
    boolean_struct bs2; 
    // Initialize each to have a unique value for member: 
    bs1.member = 7; 
    bs2.member = 14; 

    // Obtaining a pointer to an int, which happens to be inside a boolean_struct: 
    int* pi1 = &(bs1.member); 
    // I can dereference it simply like this: 
    int value1 = *pi1; 
    // value1 now has value 7. 

    // Obtaining another pointer to an int, which happens to be inside 
    // another boolean_struct: 
    int* pi2 = &(bs2.member); 
    // Again, I can dereference it simply like this: 
    int value2 = *pi2; 
    // value2 now has value 14. 

    return 0; 
} 

अब अगर हम अंदर एक boolean_structint सदस्यों के लिए संकेत का इस्तेमाल किया पर विचार विभिन्न।

operator boolean_type() const throw() 
{  
    return Traits::invalid() != m_value ? &boolean_struct::member : nullptr; 
} 

की "& boolean_struct :: सदस्य" का क्या मतलब है:

एक और सवाल के लिए निम्न कोड के विषय में है?

यह boolean_struct के अंदर member चर का पता देता है। उपरोक्त कोड उदाहरण देखें।

+0

आपके उत्तर के लिए धन्यवाद। लेकिन boolean_struct का कोई ऑब्जेक्ट नहीं है, तो क्या होता है और boolean_struct :: सदस्य बिल्कुल इंगित करता है? – Rong

+1

@ रोंंग: यह क्या इंगित करता है संकलक का कार्यान्वयन विवरण है। इसे आमतौर पर कक्षा के सदस्य में किसी प्रकार का पूर्णांक ऑफसेट के रूप में लागू किया जाता है। लेकिन इसका सटीक संख्यात्मक मूल्य अप्रासंगिक है; यह महत्वपूर्ण है कि यह आपको उस प्रकार के विशिष्ट उदाहरण के संबंध में किसी निश्चित प्रकार के किसी ऑब्जेक्ट के विशिष्ट भाग तक पहुंचने की अनुमति देता है। यह मेरे जैसे मानव शरीर पर एक अंग को इंगित करता है; मैं किसी व्यक्ति के संबंध में ऐसा कर सकता हूं। यही कारण है कि अभिव्यक्ति 'boolean_struct :: सदस्य' काम करता है; मैं एक विशिष्ट उदाहरण के संबंध में 'boolean_struct' के अंदर 'सदस्य' को इंगित कर सकता हूं। –