क्या मुझे const
संशोधक पर ध्यान देना चाहिए जो कि आदिम प्रकारों के साथ काम कर रहा है? कौन सा वाक्य अधिक वाक्य रचनात्मक रूप से सही है और क्यों?सी ++ कॉन्स संशोधक आदिम प्रकार
प्रथम संस्करण:
float Foo::bar(float a, float b)
{
return (a + b)/2.0f;
}
दूसरा संस्करण:
const float Foo::bar(const float a, const float b)
{
return (a + b)/2.0f;
}
तीसरा संस्करण:
float Foo::bar(const float a, const float b)
{
return (a + b)/2.0f;
}
मैं जानता हूँ कि आदिम टाइप चर जब कुछ विधि के लिए गुजर कॉपी कर रहे हैं, लेकिन और तरीका क्या स्पष्ट है?
const float Foo::bar(const float& a, const float& b) const
{
return (a + b)/2.0f;
}
इस सह mpiler कि notthing बदल जाएगा सूचित, और यह भी मानकों के मान की प्रतिलिपि करने की कोई जरूरत:
+1 कॉन्स्ट सदस्य फ़ंक्शन (हालांकि ओपी ने जो पूछा उससे सहायक सहायक)। – wmorrison365
"कॉलर लौटाए गए मान को संशोधित करना चाहता है" - हालांकि ऐसा करने के लिए उन्हें 'const_cast' (या सी-स्टाइल कास्ट) की आवश्यकता होगी, क्योंकि यह आदिम प्रकार की एक रैल्यू अभिव्यक्ति है। इसलिए यदि यह गैर-आधार है तो भी उन्हें बिना किसी कलाकार के गैर-कॉन्स्ट संदर्भ प्राप्त नहीं किया जा सकता है। निश्चित नहीं है कि हम वास्तव में * समर्थन करने की ज़रूरत है, लेकिन अधिक महत्वपूर्ण बात यह है कि यदि आपका फ़ंक्शन क्लास प्रकार की 'const' ऑब्जेक्ट देता है जो आमतौर पर खराब होता है, क्योंकि यह इससे आगे बढ़ता है या इसके गैर-कॉन्स्ट सदस्य फ़ंक्शन को कॉल करता है। –
एक और विवरण, यदि रिटर्न प्रकार 'बूल' था तो सशर्त अभिव्यक्तियों में आकस्मिक असाइनमेंट से बचने के लिए इसे 'const' बनाना अच्छा होता है। संकलक चेतावनियों को बदलकर इसे टाला जा सकता है, लेकिन, एक बार दो बार शर्मीला हुआ। –