2011-10-30 16 views
9

सी ++ में 'नाम' नामक 'पहचानकर्ता' कब होता है? मैं ज्यादातर पढ़ा है कि अवधि `नाम उदाहरण के रूप में पहचानकर्ता '' ज्यादा के बजाय प्रयोग किया जाता है ':सी ++ में 'पहचानकर्ता' नाम 'नाम' कब होता है?

struct S { int i }; 
S thing1; 

इस मामले में, thing1 एक नाम या पहचानकर्ता है? या शब्द 'पहचानकर्ता' और 'नाम' समान हैं? सी में, किसी वस्तु का जिक्र करते समय 'नाम' शब्द का उपयोग होता है?

उत्तर

14

सी ++ में, पहचानकर्ता अंक, अक्षरों और _ का एक अनुक्रम है, जो अंक से शुरू नहीं होता है। इस तरह के पहचानकर्ता कहीं भी दिखाई दे सकते हैं, और इसके नाम के बावजूद कुछ भी नहीं है (कोई इरादा नहीं है)।

शब्द नाम एक निश्चित व्याकरण निर्माण के साथ एक अर्थ को जोड़ता है। सी ++ कल्पना कहते हैं निम्नलिखित व्याकरण में से एक का निर्माण करती है कि अगर यह एक इकाई को दर्शाता है एक नाम है (एक वस्तु, एक वर्ग, एक टेम्पलेट और इसी तरह) या एक लेबल (जहां goto साथ के लिए कूद कर सकते हैं)

  • पहचानकर्ता
  • टेम्पलेट आईडी (identifier <...>, operator-function-id <...> और literal-operator-id <...>, foo <int> के रूप में)।
  • रूपांतरण-समारोह-आईडी (operator type, operator int के रूप में)
  • ऑपरेटर-समारोह-आईडी (operator @, operator + के रूप में)
  • शाब्दिक-ऑपरेटर-आईडी (operator "" identifier, operator "" _foo में के रूप में)

इनमें से प्रत्येक के लिए, नियम जब एक नाम किसी अन्य नाम के समान होता है तो अलग-अलग परिभाषित किया जाता है: पहचानकर्ताओं के लिए, दो नाम ar ई अनुक्रम का वही वही है (यह केवल एक व्याख्यात्मक तुलना है)। फॉर्म रूपांतरण-फ़ंक्शन-आईडी के नामों के लिए वे समान हैं यदि उपयोग किया जाने वाला प्रकार एक ही प्रकार है (इसलिए यह एक अर्थपूर्ण तुलना है)।

आप शाब्दिक-ऑपरेटर-आईडी का उदाहरण में देख सकते हैं, गैर टर्मिनल पहचानकर्ता स्थानों में व्याकरण में जहां नाम नहीं है में प्रदर्शित कर सकते हैं। इसलिए प्रत्येक पहचानकर्ता एक नाम नहीं है, और प्रत्येक नाम पहचानकर्ता नहीं है। टेम्पलेट-आईडी के उदाहरण में, हमारे पास नामों का घोंसला उपयोग है। <...> से पहले संरचनाएं क्रमशः नाम हैं, क्योंकि वे घोषित टेम्पलेट्स को इंगित करते हैं।

+1

भेद का बहुत संक्षिप्त और सबसे सटीक वर्णन। –

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