2010-06-12 15 views
11

मैंने देखा कि ऐसा करना संभव था लेकिन मुझे ब्याज समझ में नहीं आया।एक अस्थिर पर const_cast <> का उद्देश्य क्या है?

+0

क्या आप 'कॉन्स्ट वोल्टाइल' से 'अस्थिर' या किसी और चीज से कास्टिंग करने के बारे में पूछ रहे हैं? –

+0

हमेशा के रूप में, कुछ कोड पोस्ट करने में मदद मिलेगी। –

+0

सी भाषा को हटाया गया है क्योंकि सी भाषा में 'const_cast <> ' –

उत्तर

22

यहाँ आंद्रेई Alexandrescu द्वारा एक Dr. Dobbs article कि इसके बारे में विस्तार से नहीं बल्कि अश्लील मात्रा में चला जाता है है।

+0

यह एक बहुत ही दिलचस्प लेख है। Upvoted। – Puppy

+0

कई अन्य चीज़ों के साथ-साथ Alexandrescu ने लिखा है, वह लेख प्रबुद्ध है। मैंने उस आलेख के बारे में एक प्रश्न पूछा और 'अस्थिर' क्वालीफायर के दुरुपयोग के बारे में पूछा कि वह कुछ समय पहले प्रस्तावित करता है http://stackoverflow.com/questions/2491495/may-volatile-be-in-user-defined-types-to- मदद-लेखन-धागा-सुरक्षित-कोड –

+0

वास्तव में एक महान लेख। साझा करने के लिए धन्यवाद। +1। – jweyrich

3

const और volatile ध्वनि जैसे वे एक चर पर एक ही विचार को संदर्भित करते हैं, लेकिन वे नहीं करते हैं। एक const चर वर्तमान कोड द्वारा बदला नहीं जा सकता है। वर्तमान कोड के बाहर कुछ बाहरी इकाई द्वारा volatile चर बदल दिया जा सकता है। const volatile वैरिएबल होना संभव है - विशेष रूप से मेमोरी मैप किए गए रजिस्टर की तरह कुछ - जो आपके प्रोग्राम की भविष्यवाणी नहीं कर सकता है, उस समय कंप्यूटर द्वारा बदल जाता है, लेकिन आपके कोड को सीधे बदलने की अनुमति नहीं है। आप const या volatile ("सीवी-योग्यता") को एक चर में जोड़ने या निकालने के लिए const_cast का उपयोग कर सकते हैं।

4

const और volatile ऑर्थोगोनल हैं।

const का अर्थ है कि डेटा केवल पढ़ने के लिए है।

volatile का मतलब बाहरी कारणों से परिवर्तनीय बदल सकता है ताकि संकलक को प्रत्येक बार संदर्भित होने पर स्मृति से चर को पढ़ने की आवश्यकता हो।

तो const को हटाने के लिए आपको अन्यथा केवल पढ़ने-योग्य स्थान लिखने की अनुमति मिलती है (कोड में कुछ विशेष ज्ञान होना चाहिए जो स्थान वास्तव में संशोधित है)। आप volatile यह लिखने के लिए है क्योंकि आप अपरिभाषित व्यवहार का कारण बन सकता को दूर नहीं करना चाहिए (कारण 7.1.5.1/7 के लिए - If an attempt is made to refer to an object defined with a volatile-qualified type through the use of an lvalue with a non-volatile-qualified type, the program behaviour is undefined.)

+2

'const_cast' दोनों 'const' और' volatile 'पर लागू होता है, और संभावित रूप से' अस्थिर 'को हटाने के दौरान अपरिभाषित व्यवहार हो सकता है , ऐसे मामले हैं जहां यह नहीं है। अर्थात। मेमोरी बाधाओं को जोड़ने से कंपाइलर को वैरिएबल को कैश नहीं किया जाएगा और एक मजबूत गारंटी प्रदान की जाएगी कि 'अस्थिर' (न केवल चर को कैश किया जाएगा, लेकिन यह निर्देश महत्वपूर्ण खंड के बाहर फिर से नहीं किया जाएगा)। –

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