संदर्भ के बिना सैद्धांतिक रूप से लोगों में कॉपी किया जा सकता है स्मृति क्योंकि संभावना है कि आपका इनलाइन फ़ंक्शन उन्हें संशोधित कर सकता है (भले ही यह वास्तव में नहीं है)।
कई मामलों में संकलक उस तरह की चीज़ों को चुनने के लिए पर्याप्त स्मार्ट है लेकिन यह संकलक और अनुकूलन सेटिंग्स पर निर्भर करेगा। इसके अलावा यदि आपका फ़ंक्शन कक्षा चर में किसी भी गैर-कॉन्स्ट सदस्य फ़ंक्शन पर कॉल करता है तो आपके कंपाइलर को यह जांचने के लिए पर्याप्त स्मार्ट होना होगा कि वे कुछ भी संशोधित कर रहे हैं या नहीं।
एक कॉन्स संदर्भ का उपयोग करके आप मूल रूप से इसे एक स्पष्ट स्पष्ट संकेत दे सकते हैं।
संपादित करें: मैं बस एक साधारण test program के लिए मशीन कोड को देखने के लिए डीसीसी में जीसीसी 4.6 के साथ संकलित किया गया। जेनरेट कोड समान लग रहा था, इसलिए यह अनुकूलित किया गया प्रतीत होता है। यह अभी भी अच्छा अभ्यास है हालांकि अन्य कंपाइलरों के लिए और यदि कुछ भी कोड के इरादे का स्पष्ट संकेत नहीं देता है। यह भी संभव है कि जटिल परिस्थितियां हों कि संकलक हालांकि अनुकूलित नहीं कर सकता है।
भी llvm online dissembler demo दिखाता है कि समान बिटकोड भी उत्पन्न होता है। यदि आप अनुकूलन बंद करते हैं तो यह कॉन्स्ट संदर्भ के बिना थोड़ा लंबा है।
* 1 9 64 बाइट्स - कोई कॉन्स्ट संदर्भ (और फ़ंक्शंस/पैरामीटर पर कोई अन्य आधार नहीं)
* 1 9 60 बाइट्स - बस कोई कॉन्स्ट संदर्भ नहीं बल्कि अन्य consts।
* 1856 बाइट्स - कॉन्स और कॉन्स्ट संदर्भ के साथ।
स्रोत
2011-10-02 14:16:39
एक मूल्य एक मान है और संदर्भ एक संदर्भ है।एक मूल्य को पारित करने के अर्थस्वरूप एक कॉन्स संदर्भ पास करना एक गलती है जो बुरी तरह से काट सकती है। Http://stackoverflow.com/questions/4705593/int-vs-const-int/4705871#4705871 – 6502
@ 6502 देखें: यह एक ऐसे मामले का एक शानदार उदाहरण है जहां संदर्भ का उपयोग तर्क को अधिक जटिल बनाता है ('v.push_back (v [0]) 'कानूनी है, क्योंकि मानक पुस्तकालय में उस अतिरिक्त तर्क शामिल होना चाहिए)। –
@BenVoigt: यह अनुरोध देखने के लिए अच्छा है मानक में जोड़ा गया है। यह कहां कहा जाता है? – 6502