स्ट्रिंग अक्षर सरणी - स्वाभाविक रूप से अप्रत्याशित आकार (यानी उपयोगकर्ता द्वारा परिभाषित और संभवतः बड़े आकार के) की वस्तुएं हैं। सामान्य स्थिति में स्मृति में ऑब्जेक्ट्स को छोड़कर, इस तरह के अक्षर का प्रतिनिधित्व करने का कोई अन्य तरीका नहीं है, यानी अंतराल के रूप में।सी 99 में यह यौगिक अक्षर पर भी लागू होता है, जो भी अंतराल हैं।
कृत्रिम रूप से इस तथ्य को छिपाने का कोई प्रयास है कि स्ट्रिंग अक्षर भाषा स्तर पर अंतराल हैं, जो पूरी तरह से अनावश्यक कठिनाइयों का उत्पादन करेंगे, क्योंकि एक सूचक के साथ एक स्ट्रिंग अक्षर को इंगित करने की क्षमता के साथ-साथ इसे एक्सेस करने की क्षमता क्योंकि एक सरणी भाषा स्तर पर दिखाई देने वाले अपने लवल्यू-नेस पर गंभीर रूप से निर्भर करती है।
इस बीच, स्केलर प्रकारों के अक्षर ने संकलन-समय आकार तय कर दिया है। साथ ही इस तरह के अक्षर भी दिए गए हार्डवेयर आर्किटेक्चर पर सीधे मशीन कमांड में एम्बेडेड होने की संभावना है। उदाहरण के लिए, जब आप i = i * 5 + 2
जैसे कुछ लिखते हैं, तो शाब्दिक मान 5
और 2
जेनरेट किए गए मशीन कोड के स्पष्ट (या यहां तक कि निहित) भाग बन जाते हैं। वे मौजूद नहीं हैं और डेटा संग्रहण में स्टैंडअलोन स्थानों के रूप में मौजूद होने की आवश्यकता नहीं है। डेटा मेमोरी में मूल्य 5
और 2
को संग्रहीत करने में कोई मतलब नहीं है।
यह भी कुछ भी मूल्यवान नहीं है कि कई (यदि अधिकतर नहीं, या सभी) हार्डवेयर आर्किटेक्चर फ्लोटिंग-पॉइंट लिटरल वास्तव में "छिपे हुए" अंतराल के रूप में कार्यान्वित किए जाते हैं (भले ही भाषा उन्हें इस तरह प्रकट न करे)। फ्लोटिंग-पॉइंट समूह से x86 मशीन कमांड जैसे प्लेटफ़ॉर्म पर एम्बेड किए गए तत्काल ऑपरेशंस का समर्थन नहीं करते हैं। इसका मतलब यह है कि लगभग हर फ़्लोटिंग-पॉइंट शाब्दिक को संकलक द्वारा डेटा मेमोरी (और पढ़ा जाता है) में संग्रहीत किया जाना चाहिए। जैसे जब आप i = i * 5.5 + 2.1
की तरह कुछ लिखने ऐसा
const double unnamed_double_5_5 = 5.5;
const double unnamed_double_2_1 = 2.1;
i = i * unnamed_double_5_5 + unnamed_double_2_1;
दूसरे शब्दों में कुछ में अनुवादित किया गया फ्लोटिंग प्वाइंट शाब्दिक अक्सर आंतरिक रूप से बनने "अनाधिकारिक" lvalues अंत। हालांकि, यह सही समझ में आता है कि भाषा विनिर्देश ने इस कार्यान्वयन के विस्तार को बेनकाब करने का कोई प्रयास नहीं किया है। भाषा स्तर पर अंकगणितीय अक्षर रावल के रूप में अधिक समझ में आता है।
लाभाएं वस्तुएं नहीं हैं। अंतराल वे मान होते हैं जो एक असाइनमेंट के बाईं ओर दिखाई दे सकते हैं, जैसे चर, संरचनाओं के सदस्य, और सरणी तत्व लुकअप। (एल = बाएं।) – duskwuff
@ डस्कवफ: समिति अलग-अलग होने की मांग करती है। प्रति 6.3.2.1, "एक अंतराल एक ऑब्जेक्ट प्रकार या शून्य के अलावा एक अपूर्ण प्रकार के साथ एक अभिव्यक्ति है; यदि कोई मूल्यांकन नहीं किया जाता है तो एक वस्तु किसी ऑब्जेक्ट को निर्दिष्ट नहीं करती है, तो व्यवहार अपरिभाषित होता है।" उस उद्धरण में संदर्भित फुटनोट (53) के अनुसार, एक आभासी को "ऑब्जेक्ट लोकेटर वैल्यू" के रूप में सोचा जाना चाहिए। –
@ जॉन कॉल्सबेक सी ++ 11 'फिक्स्ड', उदा। 'उपनाम {}' अब संभव है। 'यू {} .arr' सरणी प्रकार का एक रैल्यू भी है यदि' यू' 'के लिए कक्षा परिभाषा में 'arr' घोषित किया गया है। –