2016-01-01 16 views
7

मैं एक इलेक्ट्रिकल इंजीनियर कंप्यूटर वैज्ञानिक के पास बदल गया हूं। मेरे लिए यह समझना वाकई मुश्किल है कि सी ++ में इतनी सारी चीज़ें क्यों हैं जो लगभग समान हैं लेकिन पूरी तरह से समान नहीं हैं। एक उदाहरण short बनाम int बनाम unsigned int बनाम size_t बनाम long int बनाम long long int बनाम uint8_t (मुझे नहीं पता कि एक पूर्णांक को नामित करने का कोई अतिरिक्त तरीका है)। ऐसा लगता है कि यह भाषा को अनावश्यक रूप से जटिल बनाता है।सी/सी ++ में size_t क्यों मौजूद है और इसे प्रतिस्थापित किया जा सकता है?

size_t को प्रतिस्थापित किया जाना चाहिए या क्या किसी अन्य तरीके से इसका उपयोग करना असंभव है?


[संपादित करें]

सहायक उत्तरों के बाद, वहाँ कुछ है कि मैं अभी भी पूरी तरह से नहीं दिख रहा है। size_t पोर्टेबिलिटी और प्रदर्शन के मामले में उपयोगी है क्योंकि कई लोगों ने सुझाव दिया है। लेकिन कितना उपयोगी है, क्या मात्रात्मक तरीके या केवल int होने के फायदे को मापने के लिए संख्यात्मक साक्ष्य है और अपने सभी भाइयों को रिटायर कर रहा है ???

+0

मूल प्रकार (जैसे 'int',' short' आदि) आंशिक रूप से हैं क्योंकि सी के पास यही था, और सी ++ मूल रूप से केवल एक प्रीप्रोसेसर था जो सी कोड उत्पन्न करता था, दूसरा हिस्सा इसलिए होता है क्योंकि यह कोड को बहुत आसान बनाता है "धातु के नजदीक"। प्रकार-उपनाम (जैसे 'size_t') कोड को अधिक सुगम बनाना है और इरादा दिखाने के लिए और अधिक है। 'Size_t' का उपयोग करके आप कहते हैं कि" यह एक आकार है ", इसलिए यह प्रोग्रामर के लिए और संकलक की आवश्यकता के लिए कम है। –

+2

[हस्ताक्षरित int बनाम आकार \ _t] (http://stackoverflow.com/questions/131803/unsigned-int-vs-size-t), या "संबंधित" खंड में कोई अन्य आकार_टी प्रश्न का संभावित डुप्लिकेट। – Zeta

+3

के साथ बदले .... क्या? –

उत्तर

14

std::size_t एक unsigned मौलिक प्रकार के लिए एक typedef है, और यह अपने कार्यक्रम में किसी भी संभावित सूचकांक/आकार का प्रतिनिधित्व करने के लिए सक्षम होना चाहिए (तकनीकी रूप से, यह भी sizeof ऑपरेटर का परिणाम है)। उसके अंतर्निहित मौलिक प्रकार विभिन्न कार्यान्वयन पर भिन्न हो सकती है, और क्योंकि आप पोर्टेबिलिटी चाहते हैं, आप std::size_t का उपयोग करें और अब परवाह नहीं है कि क्या यह एक unsigned long int या unsigned long long int आदि

std::size_t किसी अन्य तरीके से उपयोग करने के लिए किसी भी सुविधा असंभव का उपयोग नहीं करता है, यह सिर्फ एक सुविधाजनक प्रकार उपनाम है और कुछ भी नहीं।

ओपी संपादित

के जवाब में @HoapHumanoid संपादित के रूप में यह व्यक्तिगत व्याख्या/प्राथमिकता का मामला है, StackOverflow लिए एक बहुत अच्छा सवाल नहीं है। बेशक आप केवल एक संख्यात्मक प्रकार, या निश्चित आकार के प्रकार प्राप्त कर सकते हैं, हालांकि जब आप अपने प्रोसेसर से अधिक प्रदर्शन को निचोड़ना चाहते हैं, तो भौतिक प्लेटफ़ॉर्म के आधार पर, आपके पास बेहतर सीमा का प्रतिनिधित्व करने में सक्षम प्रत्येक, बेहतर है । चूंकि कंप्यूटर आर्किटेक्चर काफी अलग हैं, इसलिए प्रत्येक आर्किटेक्चर इसके लिए अपना आकार लगाएगा। int, long इत्यादि। जब आप पोर्टेबिलिटी के साथ इस समस्या को जोड़ते हैं, तो size_t स्वाभाविक रूप से उभरता है। जेनेरिक फ़ंक्शन में आप और क्या उपयोग करेंगे उदा। प्रत्येक संभावित कार्यान्वयन पर यथासंभव जितनी मेमोरी आवंटित करने की गारंटी है? बाइट्स की संख्या पारित करने के लिए आप int का उपयोग करेंगे? या शायद long int? आपको कंपाइलर मैनुअल पढ़ने, उपयुक्त प्रकार आदि की जांच करने की आवश्यकता है, फिर इसका इस्तेमाल करें। सी ++ कार्यान्वयन आपके लिए करता है, इस तरह के उपयुक्त प्रकार को परिभाषित करता है।

+0

लेकिन क्या हम इसके बजाय टाइपपीफ का उपयोग कर सकते हैं और my_wonderful_int जैसे कुछ परिभाषित कर सकते हैं ??? और size_t मार डालो ?? इसे खराब आदमी को मत मारो, बस इसे एक्सडीडीडी –

+1

@HoapHumanoid हाँ सेवानिवृत्त करें, लेकिन 'size_t' परिभाषित किया गया है ताकि सभी जानते हैं कि यह अस्तित्व में है और इसका उपयोग करता है। अन्यथा अन्य प्रोग्रामर आपके * wonderful_int * के बारे में नहीं जान पाएंगे। सभी प्रकार के प्लेटफार्मों पर एक ही नाम रखने की गारंटी और किसी भी संभावित सूचकांक को स्टोर करने की गारंटी भी पोर्टेबिलिटी के मामले में बहुत उपयोगी है। उदाहरण के लिए, मेरी मशीन पर मेरे पास 'टाइपिफ़ेड हस्ताक्षरित लंबे समय तक आकार_टी' हो सकता है, जबकि आपके पर आपके पास 'typedef unsigned long size_t' हो सकता है। इस 'टाइपपीफ' के बिना, आपको प्रत्येक प्लेटफॉर्म पर सही आकार पता होना चाहिए, जो दर्द हो जाता है। – vsoftco

+0

ठीक है, और यदि हम मारते हैं (केवल रिटायर करते हैं) न केवल आकार_टी बल्कि सभी चचेरे भाई हैं और केवल int का उपयोग करते हैं? शायद मुझे यह एक और सवाल में पूछना चाहिए। मैं इसे करने वाला हूं –

2

आप long long int भूल गए हैं, अधिकांश हस्ताक्षरित संस्करण, uint8_t और दोस्तों, और शायद कुछ और। :-)

कुछ भाषाओं में पूर्णांक प्रकारों का आकार निश्चित किया गया है। सी ++ उनमें से एक नहीं है; आकार और सीमा के खिलाफ संतुलन प्रदर्शन की अनुमति देने के लिए प्रोग्रामर को बहुत लचीलापन दिया जाता है।

लेकिन size_t बेहद उपयोगी है।यह किसी ऑब्जेक्ट, या किसी वैध सरणी अनुक्रमणिका के आकार को पकड़ने में सक्षम होने की गारंटी है। यह पोर्टेबल अभी तक कुशल प्रोग्राम लिखने के लिए और अधिक कठिन नहीं होगा।

+0

मुझे पता था कि inthehe व्यक्त करने के और तरीके थे। किसी वस्तु के आकार को पकड़ने के बारे में आपने जो कहा उसके बारे में। क्या हम इसे अन्य 9 प्रकार के पूर्णांक के साथ नहीं कर सकते ?? –

+2

ठीक है, 'हस्ताक्षरित। int '64 बिट सिस्टम पर बहुत छोटा हो सकता है, और 32 बिट सिस्टम पर' हस्ताक्षरित लंबे समय तक 'बहुत बड़ा होगा। तो किसी भी दिए गए सिस्टम पर कम से कम एक अन्य प्रकार काम करेगा, लेकिन वास्तव में अलग-अलग प्रणालियों पर कौन सा भिन्न होगा। –

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

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