मैं जानना चाहता हूं कि सी ++ नाम लुकअप तंत्र क्या है।नाम लुकअप तंत्र क्या है?
उत्तर
इसके मूल में, यह प्रक्रिया है कि संकलक यह पता लगाने के लिए उपयोग करता है कि दिया गया नाम क्या है - यह एक चर या एक समारोह या कुछ अन्य भाषा निर्माण हो। इसे अंतर्निहित भाषा निर्माण करना है जिसे नाम संदर्भित करता है।
उदा। जब आप फंक्शन printf() पर कॉल करते हैं, तो कंपाइलर को printf के लिए घोषणा मिलनी है ताकि यह समझ सके कि यह क्या है और इसे ठीक से संकलित कर सकता है।
जैसा कि पहले बताया गया था, सी ++ का उपयोग करने वाले विभिन्न नाम लुकअप तंत्र हैं, और आप Google पर आसानी से उन पर जानकारी पा सकते हैं। विकिपीडिया में इसके बारे में कुछ बुनियादी जानकारी भी है: http://en.wikipedia.org/wiki/Name_resolution
नाम लुकअप एक नाम का अर्थ पहचानने की प्रक्रिया है। नाम देखने दो उद्देश्यों के लिए अपने कोड
उदाहरण के लिए यदि आप इस कोड है
- को स्पष्ट पार्स
T(a);
यह है कि क्या
T
पर निर्भर करता है है एक प्रकार है या नहीं: यदि यह एक प्रकार है, तो यहa
की घोषणा होगी, और यदि यह एक प्रकार नहीं है, तो इसे फ़ंक्शन सी के रूप में व्याख्या किया जाता है। सब।कुछ नाम प्रकार या टेम्पलेट को दर्शाते हैं। आम तौर पर, जब भी कोई नाम सामने आ जाता है, तो यह निर्धारित करना आवश्यक है कि वह नाम उस प्रोग्राम को पार्स करने से पहले इन इकाइयों में से किसी एक को दर्शाता है या नहीं। प्रक्रिया को निर्धारित करने वाली प्रक्रिया को नाम लुकअप कहा जाता है।
नाम लुकअप उस नाम के घोषणा (3.1) के साथ किसी नाम के उपयोग को जोड़ता है।
नाम-देखने की दो प्रमुख वर्गों
- अयोग्य नाम देखने के होते हैं: वर्तमान क्षेत्र से शुरू, एक नाम देखा है, enclosing स्कोप और आधार वर्गों में से बचने के एक वर्ग के अंदर है। एक विशिष्ट नामित दायरे से शुरू नहीं होता है। जैसे ही यह नाम पाता है, यह लुकअप फॉर्म बंद हो जाता है। तो एक आंतरिक दायरे (या कक्षा) में एक नाम एक बाहरी दायरे (या बेस क्लास) में पाया गया नाम छुपाता है।
- योग्य नाम लुकअप:
::
ऑपरेटर का उपयोग करके किसी दिए गए दायरे में नाम दिखाना।
कई अन्य रूपों मौजूद हैं, एक ऐसा नाम है जो डॉट या तीर बाद दिखाई देता है (जैसे
ptr->foo
) को देख याclass foo
में एक नाम (जिसमें nontype नाम अनदेखी कर रहे हैं) को देख की तरह। एक विशेष रोचक रूप argument dependent lookup फ़ंक्शन कॉल में उपयोग किए गए तर्क प्रकारों के आधार पर फ़ंक्शन घोषणाओं को खोजने के लिए उपयोग किया जाता है।नाम लुकअप के बाद एक घोषणा मिली, यह देखने का निरीक्षण किया गया कि यह कौन सा गुण प्राप्त हुआ और क्या प्रोग्राम इसका उपयोग कर सकता है।
केवल नाम लुकअप, समारोह अधिभार संकल्प (यदि लागू हो) और उपयोग की जाँच के बाद सफल रहा है कर रहे हैं गुण नाम की घोषणा के द्वारा शुरू की अभिव्यक्ति प्रसंस्करण में आगे इस्तेमाल किया
इस प्रकार नाम-देखने निजी वर्ग मिलेगा सदस्यों, लेकिन यदि आप ऐसे नामों का उपयोग करते हैं तो आपके कोड को अस्वीकार कर दिया गया है यदि आपने उन तक पहुंच नहीं है। यह सच है भले ही बेस क्लास का सार्वजनिक उपयोग के साथ एक ही नाम होगा - ऐसा इसलिए है क्योंकि नाम-लुकअप व्युत्पन्न कक्षा में बंद हो जाता है यदि उसे कोई नाम मिलता है।
अयोग्य और योग्यता के साथ दिलचस्प अंक देर से विशेषता निरीक्षण (जहां वेक्सिंग "ओवरलोडेड विधि सही आधार को छिपाने वाली विधि" कूदता है।) एक दिलचस्प वीडियो स्टाइल द्वारा, नाम लुकअप के बारे में: https://channel9.msdn.com/Series/C9- व्याख्यान- स्टीफन- टी-लाववेज- कोर- सी-/स्टीफन- टी- लववेज- कोर- सी -1-of-n –
मुझे नहीं पता कि आप किस नाम का नाम जानने के लिए एक समानता के लिए पूछते हैं या नहीं। लेकिन मैं उपर्युक्त प्रश्न का एक संभावित उत्तर दूंगा। नाम लुकअप तंत्र में गहराई से देखने से पहले, चलो मस्ती और उपयोग के लिए दो अवधारणाओं का मानचित्रण करते हैं।
- गुंजाइश ->निर्देशिका
- वस्तु ->फ़ाइल
मैं इस सादृश्य के लिए कारण की व्याख्या करने के लिए नहीं करना चाहती। सोच के निम्नलिखित शाब्दिक रास्ते में, निर्देशिका हर बार गुंजाइश का सामना करना पड़ा है द्वारा गुंजाइश बदलें। तो ऑब्जेक्टफ़ाइल है।
#include <iostream>
using namespace std;
namespace Newton{
double distance, time;
double velocity(const double &, const double &);
}
namespace Einstein{
double distance, time;
double velocity(const double &, const double &);
}
int main()
{
using namespace Newton;
double s(10), t(10);
velocity(s,t);
return 0;
}
double Newton::velocity(const double & s, const double & t){
distance = s;
time = t;
cout << "Calculation by Newton" << endl;
return distance/time;
}
double Einstein::velocity(const double & s, const double & t){
distance = s;
time = t;
cout << "Calculation by Einstein" << endl;
return distance/time;
}
इस कोड में, velocity
के कार्यान्वयन क्या है? main()
के सहयोग में हम velocity
funciton से मिलते हैं। यदि आप इसे फ़ाइल एक्सप्लोरर में पथ नाम की तरह नाम देते हैं, तो velocity
वास्तव में /Main/velocity
है। बेशक, यदि आप /Main/
के तहत ऑब्जेक्ट नामों की जांच करते हैं, तो अभी भी दो डबल ऑब्जेक्ट्स, s
और t
और एक नेमस्पेस ऑब्जेक्ट, Newton
हैं। यदि आप /Main/double/
के तहत ऑब्जेक्ट्स के नाम सूचीबद्ध करते हैं, तो मुझे लगता है कि अंतर्निहित फ़ंक्शन velocity
नामक किसी ऑब्जेक्ट से मेल नहीं खाता है, जिसका अर्थ है, उदाहरण के लिए, ऐसी कोई ऑब्जेक्ट नहीं है - /Built-in Types/double/velocity
। यदि आप /Main/Newton/
के तहत ऑब्जेक्ट्स के नामों को फिर से सूचीबद्ध करते हैं, तो वास्तविक निर्देशिका खोज /Newton/
है क्योंकि इसे वहां घोषित किया गया है। फिर, /Newton/
के तहत ऑब्जेक्ट नामों को सूचीबद्ध करें, हमें दो डबल ऑब्जेक्ट्स, distance
और time
, और एक फ़ंक्शन velocity
मिलता है। हां, हम /Main/velocity
के लिए उम्मीदवार फ़ंक्शन पाते हैं।
मैं केवल सी ++ में नाम लुकअप का एक समानता दे सकता हूं। एक तंत्र को समाप्त करने के लिए जोड़ने के लिए और भी कुछ है।
- 1. लुकअप टेबल क्या है?
- 2. पथ नाम लुकअप?
- 3. निजी विरासत: नाम लुकअप त्रुटि
- 4. सी ++ नाम लुकअप पर स्पष्टीकरण
- 5. सी ++ टेम्पलेट्स में नाम लुकअप
- 6. नेटबीन की लुकअप क्या है?
- 7. त्वरित नाम लुकअप के लिए कंटेनर
- 8. क्या ग्रोवी एक तंत्र प्रदान करता है?
- 9. सैमफोर एक आईपीसी तंत्र है?
- 10. गिनती तंत्र
- 11. आर: पर्यावरण लुकअप
- 12. सी/सी ++ में sizeof() का तंत्र क्या है?
- 13. क्या सी ++ पारिस्थितिक तंत्र के लिए एक कार्यात्मक भाषा है?
- 14. एंड्रॉइड में startActivityForResult() के पीछे तंत्र क्या है?
- 15. एक अच्छा जावा-आधारित मास्टर-स्लेव संचार तंत्र क्या है?
- 16. क्या आईओएस के लिए कोई डेटा बाइंडिंग तंत्र उपलब्ध है?
- 17. तंत्र से अलग नीति: इसका क्या अर्थ है?
- 18. लिनक्स के सिग्नल तंत्र के लिए सी # समतुल्यता क्या है?
- 19. हास्केल वेब विकास के लिए पारिस्थितिकी तंत्र क्या है?
- 20. एकाधिक कुंजी लुकअप स्ट्रिंग
- 21. लुकअप टेबल
- 22. लुकअप यूआरआई
- 23. निर्माता मंगलाचरण तंत्र
- 24. कचरा संग्रहण तंत्र कैसे काम करता है?
- 25. async/रद्द तंत्र
- 26. हाइबरनेट मानदंड सीमा तंत्र?
- 27. सी # अपवाद हैंडलिंग तंत्र
- 28. सी # लुकअप
- 29. लुआ टेबल लुकअप
- 30. लुकअप तालिका
पहला Google परिणाम: http://www.lysium.de/blog/index.php?/archives/3-C++-name-lookup-mechanism.html –
यह एक बड़ा सवाल है। नाम लुकअप सी ++ के अधिक जटिल पहलुओं में से एक है। इसके कुछ हिस्सों (कोएनिग लुकअप) का नाम लोगों के नाम पर भी रखा जाता है, जैसे खोजकर्ताओं के बाद नए क्षेत्रों का नाम कैसे इस्तेमाल किया जाता था। –
लिटिल ज्ञात फैक्टोइड - एंड्रयू कोएनिग एकमात्र व्यक्ति है जिसका नाम सी ++ मानक - अनुभाग 3.4.2/ –