2012-11-01 5 views
23

आकार का चार, int, लंबा डबल ... एक कंपाइलर से दूसरे में भिन्न हो सकता है। लेकिन क्या मेरे पास सी ++ 11 या सी 11 मानक के अनुसार गारंटी है कि किसी भी हस्ताक्षरित और हस्ताक्षरित मौलिक अभिन्न प्रकार का आकार समान है?क्या मेरे पास गारंटी है कि आकार (प्रकार) == आकार (हस्ताक्षरित प्रकार)?

+0

मुझे तब तक उम्मीद करनी चाहिए जब तक कि किसी प्रकार का असमानता समझ में न आए, इस मामले में, मुझे यह सुनकर खुशी होगी। – chris

+1

बस एक तरफ के रूप में, आकार का चार हमेशा होता है 1. चार में 16 बिट्स की तरह असामान्य आकार हो सकता है, लेकिन तब आकार का आकार अभी भी 1 होगा और 32 बिट प्रकार का आकार 2. –

उत्तर

40

सी ++ 11 स्टैंडर्ड पूर्णांक प्रकार के बारे में कहते हैं:

(§3.9.1/3) मानक पर हस्ताक्षर किए पूर्णांक प्रकारों में से प्रत्येक के लिए, वहाँ एक इसी (लेकिन अलग) मानक अहस्ताक्षरित पूर्णांक प्रकार मौजूद है : "हस्ताक्षर किए गए चार", "हस्ताक्षरित लघु int", "हस्ताक्षरित int", "हस्ताक्षरित लंबे int", और "हस्ताक्षरित लंबे लंबे int", जिनमें से प्रत्येक एक ही मात्रा में भंडारण पर कब्जा करता है और उसी संरेखण आवश्यकताओं (3.11) के रूप में है संबंधित हस्ताक्षरित पूर्णांक प्रकार; यानी, प्रत्येक हस्ताक्षरित पूर्णांक प्रकार में एक ही ऑब्जेक्ट प्रतिनिधित्व होता है जो इसके संबंधित हस्ताक्षरित पूर्णांक प्रकार के रूप में होता है। इसी प्रकार, विस्तारित हस्ताक्षरित पूर्णांक प्रकारों में से प्रत्येक के लिए भंडारण और संरेखण आवश्यकताओं की एक ही मात्रा के साथ एक संबंधित विस्तारित हस्ताक्षरित पूर्णांक प्रकार मौजूद है। [...]

तो उत्तर हाँ है।

सी 11 के लिए, वहाँ एक इसी बयान यहां (इस N1570 से है):

(§6.2.5/6) पर हस्ताक्षर किए पूर्णांक प्रकारों में से प्रत्येक के लिए, वहाँ है एक इसी (लेकिन अलग) अहस्ताक्षरित पूर्णांक प्रकार (कीवर्ड अहस्ताक्षरित साथ नामित) (संकेत जानकारी सहित) भंडारण की एक ही राशि का उपयोग करता है और एक ही संरेखण आवश्यकताएं होती हैं [...]

-1

हाँ, वहाँ एक पूर्ण गारंटी नहीं है कि है आकार (हस्ताक्षरित प्रकार) आकार के बराबर है (हस्ताक्षरित प्रकार) हस्ताक्षर किए जाने के बाद ही इसकी सीमा बढ़ाने के लिए हस्ताक्षरित प्रकार की नकारात्मक संख्याओं की जगह ले रही है।

+1

मानक जनादेशों में कुछ भी नहीं है जो 'UINT_MAX > INT_MAX'; साइन-परिमाण मशीनें उन्हें बराबर बना सकती हैं। – supercat

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