मैं अक्सर मानता हूं कि एक गणना का आकार इसके अंतर्निहित प्रकार के आकार के समान है। लेकिन क्या यह मानक द्वारा अनिवार्य है?सी ++ में, क्या गणना का आकार इसके अंतर्निहित प्रकार के आकार के बराबर होना चाहिए?
मानक (सी ++ 14, एन 4296) कहता है कि प्रत्येक गणना में अंतर्निहित प्रकार (7.2/5) होता है। मानक भी कहता है कि वस्तुओं बाइट्स के दृश्यों के रूप में प्रतिनिधित्व कर रहे हैं, और है कि एक वस्तु का आकार इसके प्रतिनिधित्व से संबंधित है:
3,9/4 प्रकार टी की एक वस्तु की वस्तु प्रतिनिधित्व एन के अनुक्रम है टाइप टी के ऑब्जेक्ट द्वारा उठाए गए हस्ताक्षरित चार ऑब्जेक्ट्स, जहां एन आकार (टी) के बराबर है।
5.3.3/1 आकार का ऑपरेटर ऑब्जेक्ट ऑब्जेक्ट के प्रतिनिधित्व में बाइट्स की संख्या उत्पन्न करता है।
हालांकि, मैं enum के अंतर्निहित प्रकार और ऑब्जेक्ट प्रस्तुति के बीच कोई संबंध नहीं ढूंढ पाया। क्या वहाँ कोई? यदि नहीं, तो मैं तर्क दूंगा कि एक गणना के आकार को इसके अंतर्निहित प्रकार का आकार नहीं होना चाहिए।
तो मेरी प्रश्न हैं:
वहाँ एक enum की अंतर्निहित प्रकार और उसके वस्तु प्रतिनिधित्व के बीच कोई संबंध है?
क्या मानक को वास्तव में
sizeof(std::underlying_type_t<E>) == sizeof(E)
किसी भी गणना ई के लिए आवश्यक है?
मुझे 99% यकीन है कि उन्हें एक ही आकार होना चाहिए। जैसे 'std :: byte' है, जो केवल 'enum class byte है: unsigned char' (हस्ताक्षरित या हस्ताक्षरित याद नहीं किया जा सकता है), और यह एक ही आकार होने की गारंटी है। मुझे यकीन नहीं है कि यह मानक में कहां है, यद्यपि। – Justin
अन्यथा यह आकार क्या होगा? –
@NeilButterworth कोई बड़ा? यह कम से कम यूटी जितना बड़ा होना चाहिए, क्योंकि इसे अपने सभी मूल्यों को स्टोर करना है। –