2010-08-25 12 views
8

मुझे पूरी तरह से पता है कि std::type_info::name() का वापसी मूल्य कार्यान्वयन-परिभाषित है।टाइप_इनफ़ो :: नाम() निर्दिष्ट क्यों है?

सी ++ मानक (आईएसओ/आईईसी 14882: 2003 §18.5.1.7): से

रिटर्न: एक कार्यान्वयन से परिभाषित एनटीबी।

मेरा प्रश्न है: क्यों? यदि मानक निर्धारित किया जाता है कि रिटर्न मूल्य क्या होना चाहिए तो यह सदस्य कार्य अधिक उपयोगी नहीं होगा?

+0

+1 हो सकता है। मुझे लगता है, जवाब मुझे लगता है कि संकलक के लिए कुछ अक्षांश देना है। – Chubsdad

+0

चूंकि आप कंपाइलर्स के बीच द्विआधारी मिश्रण नहीं कर सकते हैं, तब तक जब तक यह कंपाइलर के भीतर संगत होता है, यह एक बड़ा सौदा नहीं है। RTTI तर्क के लिए –

उत्तर

4

असल में, यदि कोई कार्यान्वयन निर्णय लेता है कि वे RTTI का समर्थन नहीं करना चाहते हैं या नहीं, तो वे केवल return ""; कर सकते हैं। यदि मानक ने इसे कुछ वापस करने के लिए मजबूर किया, तो संभवतः वे किसी ऐसे वातावरण के लिए एक अनुपालन कंपाइलर रखने की क्षमता को मार देंगे जहां आरटीटीआई के लिए संसाधन मौजूद नहीं हैं या अक्षम होना चाहते हैं (उदाहरण के लिए माइक्रोचिप।)

और हमें यह नहीं भूलना चाहिए कि हम किसी भी कंपाइलर पर एबीआई/नाम-मैंगलिंग योजना को मजबूर नहीं करना चाहते हैं।

यह सी ++ दर्शन का पालन करता है "आप उन चीजों के लिए भुगतान नहीं करते जिनकी आपको आवश्यकता नहीं है।"

+0

+1। लेकिन क्या मानक कुछ ऐसा नहीं कर सकता * जैसे आरटीटीआई समर्थित है और स्थिर प्रकार के * यदि नहीं * गतिशील प्रकार के असंगत नाम को वापस कर दें? – Job

+0

@ जॉब: संभवतः, लेकिन एक प्रकार का नाम कैसे प्रारूपित करता है? और स्ट्रिंग कहाँ संग्रहित है? मैं मानता हूं कि एक संगत या कम से कम भरोसेमंद 'नाम()' परिणाम होना अच्छा लगेगा, लेकिन अनिवार्य है कि कंपेलरों की प्रकृति को देखते हुए किया जा सकता है। (वे कैसे प्रकारों को संभालते हैं उनका व्यवसाय है, और हम यह सुनिश्चित नहीं कर सकते कि वे इसे कैसे प्रबंधित कर रहे हैं और लक्ष्य प्लेटफॉर्म क्या है, और क्या वे एक सार्थक 'नाम()' परिणाम की अनुमति देते हैं।) – GManNickG

+1

मुझे लगता है कि '0' isn एक वैध एनटीबीएस नहीं है, इसलिए इस तरह के एक कार्यान्वयन कम से कम 'वापसी" "होना चाहिए। – sbi

2

जहां हम अलग-अलग तारों को वापस करने वाले विक्रेताओं के बारे में बात कर रहे हैं, मुझे लगता है कि यह सिर्फ एक है "हम इसे इस तरह करते हैं, आप बदलते हैं" "नहीं, हम इसे इस तरह करते हैं, आप कंपाइलर विक्रेताओं के बीच चीज बदलते हैं। यहां तक ​​कि मानक समिति भी कंपाइलर टीमों को परेशान नहीं करना चाहती है, और कुछ तटस्थ, नए मानक को तैयार करना जो कि किसी भी विक्रेता द्वारा नियोजित नहीं है, वैसे भी कुछ ऐसा है जो किसी भी तरह का गैरकानूनी है।

वे सभी स्पष्ट नामस्थान :: कक्षा :: फ़ंक्शंस आदि क्यों नहीं हैं? कुछ मौजूदा कार्यान्वयनों ने इसे ऐतिहासिक रूप से लिंकर-आवश्यक मैंगलेड नामों से मेल खाने के लिए सुविधाजनक पाया हो सकता है, इस परामर्श के लिए पारानोइड (या परावर्तक क्लाइंट) मेमोरी उपयोग इत्यादि।

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