typeid एक C ++ RTTI ऑपरेटर भी C ++ कीवर्ड होने का प्रतिनिधित्व करता है। यह एक std::type_info ऑब्जेक्ट देता है जो विशिष्ट जानकारी रखता है।

विभिन्न स्रोतों से मुझे जो समझ में आया, उसमें typeid का उपयोग करते समय, एक <typeinfo> शामिल होना चाहिए, अन्यथा कार्यक्रम बीमार है। वास्तव में, मेरा gcc5.2 संकलक भी प्रोग्राम को संकलित नहीं करता है अगर मैं पहले उल्लेखित हेडर को शामिल नहीं करता हूं। मुझे समझ में नहीं आ रहा है कि C ++ कीवर्ड के उपयोग के लिए हेडर को अनिवार्य क्यों बनाया गया है। मैं समझता हूं कि जब भी हम उस हेडर में घोषित / परिभाषित किसी वस्तु का उपयोग करते हैं, तो उसके लिए हेडर को अनिवार्य करना, लेकिन typeid एक वर्ग प्रकार का नहीं होता है। तो हेडर <typeinfo> को शामिल करने के इस प्रवर्तन के पीछे क्या कारण है?

14
vsoftco 14 नवम्बर 2015, 07:02

2 जवाब

सबसे बढ़िया उत्तर

अगला पैराग्राफ:

टाइपिड एक्सप्रेशन लैवल्यू एक्सप्रेशन है जो पॉलीमॉर्फिक टाइप कॉन्स्ट स्टैड :: type_info या इससे प्राप्त किसी प्रकार के स्टैटिक स्टोरेज की अवधि वाली ऑब्जेक्ट को संदर्भित करता है।

क्योंकि यह एक लवलीन अभिव्यक्ति है, जो std::type_info के एक आरंभक को घोषित करने के लिए संदर्भ आरंभीकरण का उपयोग करता है। <typeinfo> में वह वस्तु की परिभाषा है।

8
mattkgross 14 नवम्बर 2015, 04:22

typeid केवल वही नहीं है जिसे हेडर की आवश्यकता है

new कुछ मामलों में हेडर <new> की भी आवश्यकता होती है

नोट: निहित घोषणाओं में std, std :: bad_alloc, और std :: size_t, या कोई अन्य नाम जो इन नामों को घोषित करने के लिए पुस्तकालय का उपयोग करता है, परिचय नहीं देते हैं। इस प्रकार, हेडर को शामिल किए बिना इन कार्यों में से एक को संदर्भित करने वाली एक नई-अभिव्यक्ति, डिलीट-एक्सप्रेशन या फ़ंक्शन कॉल अच्छी तरह से बनाई गई है। हालाँकि, std, std :: bad_alloc, और std :: size_t का उल्लेख तब तक किया जाता है जब तक कि उपयुक्त शीर्षलेख को शामिल करके नाम घोषित नहीं किया जाता। ध्यान दें

नए कीवर्ड पर अभय का उत्तर देखें

एक अन्य ऑपरेटर sizeof जो std :: size_t (इसे वास्तव में हेडर शामिल करने की आवश्यकता नहीं है, लेकिन मेरी बात यहाँ है कि यह एक उपनाम का उपयोग करता है जिसे हेडर में भी परिभाषित किया गया है)

C ++ .35.3.3

साइज़ोफ़ और साइज़ोफ़ का नतीजा ... प्रकार एसटीडी का एक निरंतरता है :: size_t। [नोट: std :: size_t को मानक हेडर <cstddef> (18.2) - एंड नोट में परिभाषित किया गया है।

typeid उन वर्गों का उपयोग करें जो <typeinfo> शीर्षक में घोषित किए गए हैं

हैडर <typeinfo> सिनोप्सिस

namespace std {
class type_info;
class bad_cast;
class bad_typeid;
}

Iso cpp पेपर पर सेक्शन 18.7 देखें

IMO, इसके C ++ मानक डिजाइन तकनीक, संकलक को साफ, स्वच्छ और हल्का रखने के लिए

5
Community 23 मई 2017, 11:48