यह उत्तर वास्तव में इस बात पर निर्भर करता है कि आपके कोड का उपयोग कौन करने जा रहा है, और वे कौन से मानक देखना चाहते हैं।
size_t
एक पूर्णांक आकार एक उद्देश्य के साथ है:
प्रकार size_t
एक कार्यान्वयन-परिभाषित अहस्ताक्षरित पूर्णांक प्रकार है जो किसी भी ऑब्जेक्ट के बाइट्स में आकार को शामिल करने के लिए पर्याप्त बड़ा है। (C ++ 11 विनिर्देशन 18.2.6)
इस प्रकार, जब भी आप बाइट्स में वस्तुओं के आकार के साथ काम करना चाहते हैं, तो आपको उपयोग करना चाहिएsize_t
। अब कई मामलों में, आप बाइट्स गिनने के लिए इन आयामों / अनुक्रमकों का उपयोग नहीं कर रहे हैं, लेकिन अधिकांश डेवलपर्स size_t
निरंतरता के लिए उपयोग करना चुनते हैं ।
ध्यान दें कि आपको हमेशा उपयोग करना चाहिए size_t
यदि आपकी कक्षा का उद्देश्य एसटीएल वर्ग की दिखना और महसूस करना है। विनिर्देश उपयोग में सभी एसटीएल वर्ग size_t
। यह कंपाइलर के लिए टाइप size_t
करने के लिए मान्य है unsigned int
, और यह इसके लिए भी टाइप किए जाने के लिए मान्य है unsigned long
। यदि आप उपयोग करते हैं int
या long
सीधे करते हैं, तो आप अंततः संकलक में चले जाएंगे, जहां एक व्यक्ति जो सोचता है कि आपकी कक्षा एसटीएल की शैली का पालन करती है, फंस जाती है क्योंकि आपने मानक का पालन नहीं किया था।
हस्ताक्षरित प्रकारों का उपयोग करने के लिए, कुछ फायदे हैं:
- छोटे नाम - लोगों के लिए टाइप करना वास्तव में आसान है
int
, लेकिन कोड के साथ अव्यवस्था करना बहुत कठिन है unsigned int
।
- प्रत्येक आकार के लिए एक पूर्णांक - 32-बिट्स का केवल एक CLS अनुरूप पूर्णांक है, जो कि Int32 है। C ++ में, दो (
int32_t
और uint32_t
) हैं। यह एपीआई इंटरऑपरेबिलिटी को सरल बना सकता है
हस्ताक्षरित प्रकारों का बड़ा नुकसान स्पष्ट है: आप अपने डोमेन का आधा हिस्सा खो देते हैं। एक हस्ताक्षरित संख्या एक अहस्ताक्षरित संख्या के रूप में उच्च गिनती नहीं कर सकती। जब C / C ++ आसपास आया, तो यह बहुत महत्वपूर्ण था। एक प्रोसेसर की पूरी क्षमता को संबोधित करने में सक्षम होने के लिए, और यह करने के लिए कि आपको अहस्ताक्षरित संख्याओं का उपयोग करने की आवश्यकता है।
.NET लक्षित के प्रकारों के लिए, पूर्ण-डोमेन अहस्ताक्षरित सूचकांक की आवश्यकता के रूप में मजबूत नहीं था। इस तरह की संख्याओं के लिए कई उद्देश्य केवल एक प्रबंधित भाषा में अमान्य हैं (मेमोरी पूलिंग दिमाग में आती है)। इसके अलावा, जैसा कि .NET बाहर आया था, 64-बिट कंप्यूटर स्पष्ट रूप से भविष्य थे। हम 64-बिट पूर्णांक की पूरी श्रृंखला की आवश्यकता से बहुत दूर हैं, इसलिए एक बिट का त्याग करना उतना दर्दनाक नहीं है जितना पहले था। यदि आपको वास्तव में 4 बिलियन इंडेक्स की आवश्यकता है, तो आप बस 64-बिट पूर्णांक का उपयोग करने के लिए स्विच करते हैं। सबसे कम, आप इसे 32 बिट मशीन पर चलाते हैं और यह थोड़ा धीमा है।
मैं व्यापार को सुविधा के रूप में देखता हूं। यदि आपके पास पर्याप्त कंप्यूटिंग शक्ति है, तो आपको अपने सूचकांक प्रकार का थोड़ा सा भी बर्बाद करने में कोई आपत्ति नहीं है जिसे आप कभी भी कभी उपयोग नहीं करेंगे, तो यह सिर्फ टाइप करने int
या उससे long
दूर चलने के लिए सुविधाजनक है। यदि आप पाते हैं कि आप वास्तव में अंतिम बिट चाहते थे, तो आपको शायद अपने नंबरों की हस्ताक्षर पर ध्यान देना चाहिए था।
-1
, "वापस नहीं मिला" या "सीमा के बाहर" इंगित करने के लिए, एक इंडेक्स लौटाने वाले फ़ंक्शंस से लौटाया जाता है। यहCompare()
फ़ंक्शंस (कार्यान्वयनIComparable
) से भी लौटा है । एक 32 बिट इंट को एक सामान्य संख्या के लिए टाइप करने के लिए जाना जाता है, जो मुझे उम्मीद है कि स्पष्ट कारण हैं।