सी ++ में हमेंऔर std::int64_t
जैसे फिक्स्ड-चौड़ाई पूर्णांक प्रकार प्रदान किए जाते हैं, जो वैकल्पिक हैं और इसलिए क्रॉस-प्लेटफ़ॉर्म कोड लिखने के लिए इष्टतम नहीं हैं। हालांकि, हमें प्रकारों के लिए गैर-वैकल्पिक रूप भी मिलते हैं: उदा। "तेज़" प्रकार, उदा। std::int_fast32_t
और std::int_fast64_t
, साथ ही साथ "सबसे छोटे आकार" संस्करण, उदा। std::int_least32_t
, जो दोनों आकार में कम से कम बिट्स निर्दिष्ट हैं।क्या क्रॉस-प्लेटफ़ॉर्म कोड में int से C++ 11 के std :: int_fast32_t या std :: int_fast16_t का उपयोग करने का कोई कारण है?
जिस कोड पर मैं काम कर रहा हूं वह एक सी ++ 11-आधारित क्रॉस-प्लेटफ़ॉर्म लाइब्रेरी का हिस्सा है, जो सबसे लोकप्रिय यूनिक्स/विंडोज/मैक कंपाइलर्स पर संकलन का समर्थन करता है। एक प्रश्न जो अब आया है, यदि सी ++ 11 निश्चित-चौड़ाई पूर्णांक प्रकारों द्वारा कोड में मौजूदा पूर्णांक प्रकारों को बदलने में कोई फायदा होता है।
std::int16_t
और std::int32_t
तरह वैरिएबल का उपयोग का एक नुकसान यह है कि वे उपलब्ध हैं, क्योंकि वे केवल कार्यान्वयन सीधे प्रकार (http://en.cppreference.com/w/cpp/types/integer के अनुसार) का समर्थन करता है प्रदान की जाती हैं एक गारंटी की कमी है।
हालांकि, int
से कम से कम 16 बिट्स और 16-बिट कोड में उपयोग किए गए पूर्णांक के लिए पर्याप्त हैं, int पर std::int_fast16_t
के उपयोग के बारे में क्या? क्या यह int
प्रकारों को std::int_fast16_t
और सभी unsigned int
के std::uint_fast16_t
द्वारा इस तरह से अवांछित करने का लाभ प्रदान करता है या यह अनावश्यक है?
Anologously, अगर जानते हुए भी कि सभी समर्थित प्लेटफार्मों और compilers में कम से कम 32 बिट आकार की एक int
की सुविधा है, यह भावना std::int_fast32_t
और std::uint_fast32_t
क्रमशः द्वारा उन्हें बदलने के लिए है?
आपका "नुकसान" एक धारणा पर आधारित प्रतीत होता है। कौन कहता है कि 'std :: int16_t' और 'std :: int32_t' दूर जा सकता है? आखिरकार, उन्हें * मानक * की आवश्यकता होती है। –
यदि आप यह सुनिश्चित करना चाहते हैं कि आपकी int कम से कम 32 बिट चौड़ी है, तो इसे करें। सामान्य 'int' ऐसी गारंटी नहीं देता है। –
@ ग्रेगहेविल वे वैकल्पिक हैं। मेरा मतलब था कि उन्हें ओएस और कंपाइलर के भविष्य के संस्करणों में समर्थित नहीं किया जा सकता है, अगर उन्हें वहां पहले समर्थित किया गया था। मुझे किसी भी ओएस और कंपाइलर से अवगत नहीं है जो std :: int16_t और std :: int32_t प्रदान नहीं करता है, लेकिन चूंकि वे केवल इस गैर-वैकल्पिक हैं यदि इस आकार का पूर्णांक पहले से मौजूद है, तो उनके अस्तित्व की गारंटी नहीं दी जा सकती है। यह भी देखें: http: // stackoverflow।com/प्रश्न/32155759/वैकल्पिक-निश्चित-चौड़ाई-पूर्णांक-प्रकार-पेश-इन-सी 11 जहां आप अधिक जानते हैं तो उत्तर दे सकते हैं :) – Ident