2012-01-03 4 views
58

मैं अपने सी ++ पुस्तक (Deitel) पढ़ रहा था जब मैं एक घन का आयतन की गणना करने के एक समारोह के बारे में जाना। कोड है निम्नलिखित:मूल्य से गुजरते समय "const" अनावश्यक नहीं है?

double cube (const double side){ 
    return side * side * side; 
} 

"स्थिरांक" क्वालीफायर का उपयोग कर के लिए विवरण इस एक था: "स्थिरांक योग्य कम से कम विशेषाधिकार के सिद्धांत को लागू करने के लिए इस्तेमाल किया जाना चाहिए, संकलक समारोह को संशोधित नहीं है कि कह रहा परिवर्तनीय पक्ष "।

मेरा प्रश्न: वैरिएबल को मूल्य से पारित होने के बाद यहां "कॉन्स्ट" अनावश्यक/अनावश्यक का उपयोग नहीं है, इसलिए फ़ंक्शन इसे किसी भी तरह संशोधित नहीं कर सकता है?

+5

'const' यहाँ का अर्थ है कि आप संशोधित नहीं कर सकते' अंदर 'घन()' विधि side' पैरामीटर अप्रत्याशित व्यवहार से बचने के लिए। –

+1

कभी कभी बातें आवश्यकता की तुलना में 'अच्छा अभ्यास' के बारे में और अधिक कर रहे हैं। मुझे लगता है कि यह उन समयों में से एक है। – destan

+2

मुझे लगता है कि उत्तरों ने यह बताने का अच्छा काम किया है कि आप ऐसा क्यों करेंगे, लेकिन मैं इसे बाहरी कॉलर में जोड़ दूंगा, 'const' * * अनावश्यक है और यह फ़ंक्शन के हस्ताक्षर का हिस्सा नहीं है। इसका मतलब है कि आप कुछ भी बदले बिना फंक्शन घोषणा में इसे छोड़ सकते हैं। आप भी इसे बाद में हटा सकते हैं यदि किसी कारण से आप अपने कोड कम पोषणीय बनाना चाहते हैं, और यह बुला कोड को प्रभावित नहीं करेगा। –

उत्तर

82

const क्वालीफायर पैरामीटर खुद को संशोधित करने से समारोह के अंदर कोड को रोकता है। जब कोई कार्य तुच्छ आकार से बड़ा होता है, तो ऐसा आश्वासन आपको फ़ंक्शन को तुरंत पढ़ने और समझने में सहायता करता है। आप जानते हैं कि side का मूल्य नहीं बदलेगा, तो आप समय के साथ अपने मूल्य का ट्रैक रखने के रूप में आप पढ़ सकते हैं के बारे में चिंता करने की जरूरत नहीं है। कुछ परिस्थितियों में, यह संकलक को बेहतर कोड उत्पन्न करने में भी मदद कर सकता है।

लोगों की एक गैर तुच्छ संख्या निश्चित रूप से एक मामले के रूप ऐसा करते हैं, यह आम तौर पर अच्छा शैली पर विचार।

+0

समझ में आता है। धन्यवाद। –

+5

क्यों "भी"? यह सब * यह करता है। –

+0

@ किथ थॉम्पसन - वास्तव में, यह सब कुछ करता है, लेकिन ओ.पी. कॉन्स रेफ पैरामीटर के बारे में सोच रहा है, जहां 'कॉन्स' आपको मूल वस्तु को बदलने से रोकता है। चित्रण के लिए –

43

आप कुछ इस तरह कर सकते हैं:

int f(int x) 
{ 
    x = 3; //with "const int x" it would be forbidden 

    // now x doesn't have initial value 
    // which can be misleading in big functions 

} 
+10

+1 :) –

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