मैं नियमित रूप से const
का उपयोग करता हूं जब इन-मेमोरी डेटा संरचनाओं के साथ काम करता है और मेरा कोड कॉन्स्ट-सही रखता है, लेकिन मुझे यकीन नहीं है कि const
को और अधिक जटिल वस्तुओं पर लागू होना चाहिए, जैसे कि निम्न:डेटाबेस या फाइल सिस्टम एक्सेस के लिए कॉन्स अर्थशास्त्र
- वस्तुओं दूरस्थ सिस्टम के लिए कनेक्शन का प्रतिनिधित्व करने
- वस्तुओं एक डेटाबेस द्वारा समर्थित (कि मांग पर डेटाबेस से भागों लोड कर सकते हैं)
- वस्तुओं एक पर डिस्क निर्देशिका वृक्ष द्वारा समर्थित (निर्देशिका वृक्ष के उपयोग के साथ एक अलग वस्तु पदानुक्रम द्वारा नियंत्रित)
const
विधियों को इन तरह की वस्तुओं के लिए क्या संकेत देना चाहिए? मैं कुछ संभावनाओं के बारे में सोच सकता हूं:
- "सख्त" कॉन्स्ट - विधि जो किसी भी स्मृति स्थिति को संशोधित नहीं करती हैं। हालांकि, यह encapsulation तोड़ने लगते हैं, क्योंकि कॉलर्स को यह जानने की आवश्यकता होगी कि कौन से तरीके कनेक्शन स्थिति को संशोधित करते हैं और जो नहीं करते हैं।
- "लॉजिकल" कॉन्स्ट - ऑब्जेक्ट्स की लॉजिकल स्टेटस को संशोधित नहीं करने वाले तरीके हैं। हालांकि, यह संभावित रूप से
mutable
के रूप में बहुत सारे राज्य और कैशिंग चर को चिह्नित करने की आवश्यकता होगी। हालांकि मुझे एहसास है किmutable
के लिए डिज़ाइन किया गया है, इसका उपयोग करके यह हैक की तरह लगता है। इसके अलावा, उस कॉन्स का मतलब है "मैं इसे संशोधित करने का वादा करता हूं," यह लागू करने का अधिकार प्रतीत नहीं होता है जब विधियां अजीब और अद्भुत तरीकों से कनेक्शन की स्थिति को संशोधित कर सकती हैं (जब तक वे encapsulation बनाए रखते हैं), कैश के परिणाम के रूप में परिणाम जितना चाहें उतना चाहते हैं, कनेक्शन विफल होने पर अपवाद फेंक दें, आदि - कोई कॉन्स - पिछली समस्याओं के प्रकाश में, क्या अधिक जटिल वस्तुओं के लिए बस इतना अर्थ नहीं है?
कौन सा दृष्टिकोण सबसे उपयोगी है? सबसे आम कौन सा है?
यह एक प्रश्न से संबंधित प्रतीत होता है जो मैंने कुछ समय पहले पूछा था: http://stackoverflow.com/questions/5208184/should-member-functions-be-const-if-they-affect-logical-state-but-not -bitwise। –
इसके अलावा http://stackoverflow.com/questions/98705/what-are-the-semantics-of-a-const-member- कार्यक्षमता –
विषयपरक, लेकिन मैं कहूंगा कि आपके पास डेटाबेस कनेक्शन ऑब्जेक्ट है, तो मैं चाहता हूं कनेक्शन के पैरामीटर को 'कॉन्स्ट' का संदर्भ लें: पुनः कनेक्ट, क्लोज़, इत्यादि को म्यूटेटिंग ऑपरेशन होना चाहिए। दूसरी तरफ एक प्रश्न करना, 'const' हो सकता है। तो ऑब्जेक्ट का कॉन्स्ट-रेफरेंस क्वेरी कर सकता है लेकिन कनेक्शन बंद नहीं कर सकता है। (बेशक कनेक्शन हमेशा दूसरी ओर से बंद किया जा सकता है।) –