मानक में, समानता, में §6.5.9 "समानता ऑपरेटरों" चर्चा की है &
में §6.5.3.2 "पता और अविवेक ऑपरेटरों" चर्चा की है, और const
में §6.7.3 "क्वालिफायर टाइप करें" चर्चा की है। पॉइंटर समानता के बारे में प्रासंगिक मार्ग §6.5.9 है।6:
दो संकेत तुलना बराबर यदि और केवल यदि दोनों अशक्त संकेत दिए गए हैं, दोनों या समारोह, (एक वस्तु के लिए सूचक और इसकी शुरुआत में एक subobject सहित) एक ही वस्तु की ओर इशारा [या संकेत दिए गए हैं एक सरणी के अंत]
अतीत &
का ही परिभाषा है कि "एकल &
ऑपरेटर अपनी संकार्य का पता पैदावार है। [...] परिणाम ऑब्जेक्ट या उसके ऑपरेंड द्वारा निर्दिष्ट फ़ंक्शन के लिए एक सूचक है। "(§6.5.3.2.3)। दुर्भाग्य से "पता" शब्द की कोई औपचारिक परिभाषा नहीं है; लेकिन विशिष्ट वस्तुओं (==
द्वारा परिभाषित समानता के लिए) के अलग-अलग पते हैं, क्योंकि पते पॉइंटर्स हैं जो उपरोक्त समानता की परिभाषा से अलग हैं।
const
के अर्थ के रूप में, §6.7.3 का संकेत नहीं है const
क्या एक वस्तु (जो निष्पादन वातावरण में डेटा भंडारण का एक क्षेत्र है ", सामग्री जिसमें से मूल्यों का प्रतिनिधित्व कर सकते हैं बनाता है पर कोई प्रभाव पड़ता है कि "§3.14 द्वारा)। एक फुटनोट आगे इंगित करता है कि "कार्यान्वयन की आवश्यकता ऐसी वस्तु के लिए भंडारण आवंटित करने की आवश्यकता नहीं है यदि उसका पता कभी भी उपयोग नहीं किया जाता है"। हालांकि यह गैर-मानक है, यह एक मजबूत संकेत है कि यदि पता उपयोग किया जाता है तो भंडारण प्रत्येक ऑब्जेक्ट के लिए आवंटित किया जाना चाहिए।
ध्यान दें कि यदि वस्तुओं const volatile
हैं, तो यह काफी स्पष्ट है (के रूप में कभी हो सकता है volatile
के रूप में स्पष्ट) कि वे एक ही पते के नहीं हो सकता, क्योंकि const volatile
वस्तुओं कार्यान्वयन से परिवर्तनशील हैं। (§6.7.3.10 const volatile
के उपयोग का एक उदाहरण है।)
यहां तक कि गैर अस्थिर मामले में , const
केवल इंगित करता है कि कार्यक्रम के इस भाग वस्तु को संशोधित करने के लिए अनुमति नहीं है, नहीं है कि वस्तु पढ़ा है केवल सामान्य में। किसी अन्य चीज़ के साथ const
ऑब्जेक्ट के संग्रहण को मर्ज करने के लिए, अशिष्ट कार्यान्वयनकर्ता को यह गारंटी देना होगा कि ऑब्जेक्ट को कुछ भी संशोधित नहीं कर सकता है। अलग संकलन के साथ कार्यान्वयन में बाहरी संबंध के साथ यह एक वस्तु के लिए काफी मुश्किल है (लेकिन निश्चित रूप से हम मानक से और जीते-अभ्यास-अभ्यास क्षेत्र में दूर हो रहे हैं)।
इस एक सी प्रोग्राम लिखने के बारे में है, तो आप अपने अवसरों वस्तुओं विभिन्न मूल्यों देकर बढ़ा सकते हैं:
const int x = __LINE__;
const int y = __LINE__;
इस बारे में सी के एक सैद्धांतिक मॉडल है, तो मैं करने के लिए जाना चाहते हैं वस्तुएं अलग हैं। आपको अपने पेपर में एक अनुच्छेद (यहां विस्तारित संस्करण) में उत्तरों को सारांशित करके इस विकल्प को उचित ठहराना होगा।
दूसरी तरफ, यदि यह एक अनुकूलक कंपाइलर लिखने के बारे में है, तो मुझे संदेह है कि यह स्थिरता को मर्ज करने के लिए कई वास्तविक-दुनिया कार्यक्रमों को चोट पहुंचाएगा। मैं एक एम्बेडेड कंपाइलर में विलय करने के लिए जाऊंगा, जहां उपयोगकर्ताओं को किनारे के मामलों के साथ इसे सुरक्षित रखने के लिए उपयोग किया जाता है और जहां सहेजी गई स्मृति गैर-नगण्य हो सकती है। मैं एक मेजबान मंच में विलय के खिलाफ जाऊंगा जहां कोई लाभ नगण्य होगा।
(N1256 उर्फ C99 + TC3 से संदर्भ। मुझे नहीं लगता कि संस्करण एक फर्क नहीं पड़ता।)
ध्यान दें कि जीसीसी केवल x' उत्सर्जित करेगा 'और' y' अपने पतों लिया जा सकता है, और में उस मामले में, यह उन्हें विभिन्न पते पर छोड़ देता है। – ninjalj
यह भी देखें: [सी में कॉन्स्ट क्वालिफायर का गहरा विश्लेषण] (http://stackoverflow.com/questions/4275504/deep-analysis-of-const-qualifier-in-c) –