क्या आपको यह मदद मिलती है?आप अपने कार्यों को कितनी बार घोषित करते हैं?
उत्तर
हर बार जब आप जानते हैं कि विधि उस वस्तु की स्थिति को नहीं बदलेगी जिसे आपको निरंतर घोषित करना चाहिए।
यह आपके कोड को पढ़ने में मदद करता है। और जब आप ऑब्जेक्ट की स्थिति बदलने की कोशिश करते हैं तो यह मदद करता है - कंपाइलर आपको रोक देगा।
और यदि फ़ंक्शन ऑब्जेक्ट स्टेटस को भी स्पर्श नहीं कर रहा है लेकिन इनपुट इनपुट को पूरी तरह से वापसी मान में बदल देता है, तो यह स्थिर होना चाहिए। स्टेटिक> कॉन्स सदस्य> सामान्य सदस्य। – Lucas
जब आपके पास const
ऑब्जेक्ट है, तो संकलक आपको कॉल करने की एकमात्र विधियां const
कीवर्ड द्वारा सुरक्षित चिह्नित हैं। वास्तव में, केवल सदस्य विधियां const
विधियों के रूप में समझ में आती हैं।
सी ++ में, किसी ऑब्जेक्ट की प्रत्येक विधि को ऑब्जेक्ट पर this
पॉइंटर प्राप्त होता है; const
विधि को केवल const
this
पॉइंटर प्राप्त होगा।
मान लें कि आप के रूप में, तरीकों के बारे में बात कर रहे हैं:
struct Example {
void f() const;
};
फिर अगर वे एक स्थिरांक वस्तु पर प्रतिदेय होना चाहिए, विधि स्थिरांक होना चाहिए।
जितनी बार संभव हो सके। जिन कार्यों को डेटा सदस्यों को बदलने की आवश्यकता नहीं है उन्हें कॉन्स के रूप में घोषित किया जाना चाहिए। यह कोड को और समझने योग्य बनाता है और अनुकूलन के लिए संकलक को संकेत दे सकता है।
नहीं अक्सर पर्याप्त ....
जबकि सभी प्रश्नों के उत्तर, सही कर रहे हैं अगर आप एक पुस्तकालय है कि const correct नहीं है का उपयोग कर रहे तो यह स्थिरांक सभी स्थानों आप इसका इस्तेमाल करना चाहिए उपयोग करने के लिए मुश्किल है।
आप एक पुराने एपीआई कि लेता है, तो एक चार * कि सभी तार्किक प्रयोजनों के लिए एक स्थिरांक चार * होना चाहिए, तो आप अपने कोड में स्थिरांक भूल जाते हैं या कुछ बदसूरत कास्टिंग क्या करना है या तो। उस मामले में मैं कॉन्स भूल गया।
विकल्प एपीआई को लपेटना और यह निर्धारित करना है कि क्या वास्तव में लागत डेटा लेना चाहिए और यदि ऐसा है तो अपने रैपर के अंदर इनपुट डेटा की स्थिरता को दूर करें। इसका मतलब है कि आपको केवल बदसूरत कास्टिंग ओएनसीई की आवश्यकता है और आप इस तथ्य पर टिप्पणी कर सकते हैं कि आपने यह निर्धारित किया है कि यह आपके परीक्षण के माध्यम से सुरक्षित और सही था। आईएमएचओ सबसे अधिक नहीं है अगर सभी 'पुराने एपीआई' को लपेटा जाना चाहिए ... –
मैं कार्यों को कॉन्स के रूप में घोषित करता था लेकिन अब मैं शायद ही कभी ऐसा करता हूं।
मुख्य समस्या यह थी कि अगर मैं कॉन्स से गैर-कॉन्स में कोई फ़ंक्शन बदलना चाहता था, तो इसका मतलब यह होगा कि उस फ़ंक्शन को कॉल करने वाले अन्य सभी कॉन्स्ट फ़ंक्शंस को गैर-कॉन्स्ट में बदलना होगा।
ऑप्टिमाइज़ेशन के कारण मैंने सोचा था कि यह अक्सर होता है। उदाहरण के लिए मेरे पास एक GetData() फ़ंक्शन था जो डेटा पर पॉइंटर वापस करने के लिए उपयोग किया जाता था, लेकिन बाद में मैंने डेटा सेट अप करने के लिए ऑप्टिमाइज़ किया, अगर GetData() समाप्त हो जाता है (जो ऑब्जेक्ट की स्थिति को बदलता है, तो यह अब एक कॉन्स नहीं है समारोह)।
अन्य कार्यों के लिए वही बात जो ऑब्जेक्ट की स्थिति को बदले बिना कुछ गणना कर सकती हैं, लेकिन कुछ बिंदु पर यह परिणाम को कैशिंग कर रहा था क्योंकि समारोह को कई बार बुलाया गया था और यह एक बाधा थी।
अभ्यास में, कम से कम मेरे प्रोजेक्ट के लिए, मैंने अपने कार्यों को कॉन्स के रूप में घोषित करने से बहुत कम लाभ देखा।
कार्य जो "लॉजिकल वैल्यू" नहीं बदल सकता है, फिर भी आपको अपने कैश के लिए म्यूटेबल डेटा सदस्यों का उपयोग करना होगा। –
हां, रोजर की टिप्पणी से सहमत हैं। म्यूटेबल के रूप में घोषित डेटा सदस्यों को एक कॉन्स फ़ंक्शन के अंदर बदला जा सकता है। – jasonline
मैं लगभग हर अवसर पर कॉन्स का उपयोग करता हूं, और तथ्य यह है कि यह दोनों उद्देश्यों के दस्तावेज प्रदान करता है और उस इरादे से अनुपालन को लागू करता है। भाषा की विशेषताएं उससे बेहतर नहीं होती हैं, और फिर भी कॉन्स उत्सुकता से अनदेखा है।(वास्तविकता है कि कोडर स्वयंभू सी के ++ बहुमत int*, int*const, const int*
और const int*const
के बीच का अंतर व्याख्या नहीं कर सकते लगता है।)
यह कभी नहीं अपने 'सी' मूल की वजह से हो सकता था, वहीं मैं अक्सर लगता है कि सी ++ होगा एक बेहतर भाषा बनें यदि कॉन्स्ट डिफ़ॉल्ट था और 'var' या उदार छिड़काव (कहें) 'var' या कुछ समान कीवर्ड आवश्यक चर के निर्माण के संशोधन की अनुमति देने के लिए आवश्यक था।
- 1. क्या आप अपने मॉड्यूल विशिष्ट कार्यों को स्थैतिक घोषित करते हैं?
- 2. आप अपने विकास पर्यावरण और देव को कितनी बार पुनर्मूल्यांकन और अपग्रेड करते हैं। उपकरण?
- 3. आप अपने UI में System.Component.BackgroundWorker का कितनी बार उपयोग करते हैं? (यदि कभी भी)
- 4. एचडीएफएस: आप फ़ाइलों को बार-बार कैसे सूचीबद्ध करते हैं?
- 5. बाजार ऐप आंकड़े कितनी बार अपडेट करते हैं?
- 6. आप अपने नामस्थान कैसे व्यवस्थित करते हैं?
- 7. आप एक अनुमानित प्रतिनिधि इनलाइन कैसे घोषित करते हैं?
- 8. रेल में प्रारंभिक कितनी बार दौड़ते हैं?
- 9. संकलक संकलित - कितनी बार?
- 10. सॉफ़्टवेयर का जीवनकाल: आप कितनी बार स्क्रैच से शुरू करने की अपेक्षा करते हैं?
- 11. वास्तविक दुनिया में आप कितनी बार स्यूडोकोड का उपयोग करते हैं?
- 12. किसी प्रोजेक्ट पर अकेले काम करते समय आप अपने आप को कैसे सक्रिय करते हैं?
- 13. आप कितनी बार SQL सीई डेटाबेस को कॉम्पैक्ट करना चाहिए?
- 14. आप ओवरलोडेड पूल ऑपरेटर को कैसे घोषित करते हैं और उपयोग करते हैं?
- 15. आप अपने जावास्क्रिप्ट को कैसे अनुकूलित करते हैं?
- 16. आप अपने नमक तारों को कहां स्टोर करते हैं?
- 17. आप अपने यूआरएल मार्गों को कैसे व्यवस्थित करते हैं?
- 18. आप अपने एसक्यूएल उदाहरणों को कैसे याद/प्रबंधित करते हैं?
- 19. आप अपने वर्जन कंट्रोल रिपोजिटरी को कैसे व्यवस्थित करते हैं?
- 20. आप अपने knockout.js बाध्यकारी अभिव्यक्तियों को कैसे डिबग करते हैं?
- 21. आप अपने ActiveMQ को लंबवत कैसे स्केल करते हैं?
- 22. आप संस्करण नियंत्रण कितनी दूर लेते हैं?
- 23. NSUserDefaults कितनी बार सिंक्रनाइज़ होते हैं?
- 24. आप सी ++ हेडर में सरणी कैसे घोषित करते हैं?
- 25. आप अपने एएसपी.NET एमवीसी जेसन रीसेट कार्यों का परीक्षण कैसे करते हैं?
- 26. आप अपने छोटे पुन: प्रयोज्य कैफंक्शन कैसे व्यवस्थित करते हैं?
- 27. आप कोड कवरेज कितनी दूर लेते हैं?
- 28. आप अपने स्प्रिंट बैकलॉग को कैसे देखते हैं?
- 29. आप अपने यूनिट परीक्षणों के साथ क्या परीक्षण करते हैं?
- 30. आप टीडीडी को कितनी दूर लागू कर सकते हैं?
लगातार! (क्षमा करें, इसकी मदद नहीं कर सका) – Thilo