2012-06-04 5 views
7

क्या सी ++ मानक कक्षा और संरचना के संकलन लेआउट को निर्देशित करता है? वे अलग-अलग कैसे संकलित होते हैं खासकर यदि वे खाली हैं?एक खाली वर्ग और खाली संरचना कैसे संकलित की जाती है?

+0

पहले प्रश्न पर दोनों मायने में Absolutelu "नहीं"। दूसरे प्रश्न के जवाब में एक वर्ग का "यह" सूचक है। – paulsm4

+11

@ paulsm4: दूसरे प्रश्न का आपका उत्तर गलत है। इस संबंध में 'वर्ग' और 'संरचना' के बीच कोई अंतर नहीं है। बुद्धिमानी के लिए, 'संरचना' में 'आभासी' सदस्य हो सकते हैं। –

+5

कक्षाएं और structs एक ही चीज़ हैं, केवल अंतर अंतर पहुंच विनिर्देश (सदस्यों और अड्डों के लिए) के साथ है। – GManNickG

उत्तर

13

यह एक तरह से करता है, यह कहता है कि इसे तब तक आवंटित करना होगा जब तक कि कुछ मामलों को बेस क्लास (खाली बेस क्लास ऑप्टिमाइज़ेशन के रूप में जाना जाता है) के रूप में उपयोग किया जाता है। यह गारंटी है कि विभिन्न वस्तुओं के अलग-अलग पते हैं।

उन्हें संकलित किया गया है कि struct और class डिफ़ॉल्ट पहुंच विनिर्देशक को छोड़कर, वही बात है। सी ++ 11मानक-लेआउट कक्षाओं/structs की धारणा पेश की गई है, और गारंटी देता है कि खाली कक्षाओं के लिए मेमोरी लेआउट समान है।

+1

क्या यह कहीं भी निर्दिष्ट किया गया है कि कितनी जगह आवंटित की जाती है? 1 बाइट? – Paranaix

+2

@Paranaix: जहां तक ​​मुझे पता है, निर्दिष्ट नहीं है। संरेखण आवश्यकताओं को पूरा करने के लिए यह 1 बाइट से अधिक हो सकता है। –

+0

संदर्भ का आकार आर्किटेक्चर निर्भर होगा। X86 पर एक पता 32 बिट होगा। – starbolin

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