2012-06-11 22 views
40

जबकि निम्नलिखित समारोह abs लेखन, मैं त्रुटि मिलती है नहीं हो सकता।गैर सदस्य समारोह सीवी-क्वालीफायर

template<typename T> 
inline unsigned int abs(const T& t) const 
{ 
    return t>0?t:-t; 
} 

समारोह के लिए const क्वालीफायर को हटाने के बाद कोई त्रुटि है। चूंकि मैं फ़ंक्शन के अंदर t को संशोधित नहीं कर रहा हूं, इसलिए उपर्युक्त कोड संकलित होना चाहिए था। मुझे आश्चर्य है कि मुझे त्रुटि क्यों मिली?

उत्तर

84

t को संशोधित नहीं करने के लिए अपनी इच्छा const T& t में व्यक्त किया है। समाप्ति const निर्दिष्ट करता है कि आप श्रेणी abs से संबंधित किसी भी सदस्य चर को संशोधित नहीं करेंगे। चूंकि यह कोई वर्ग नहीं है जहां यह फ़ंक्शन संबंधित है, आपको

30

फ़ंक्शन घोषणा के अंत में const संशोधक सदस्य कार्यों के लिए छिपा this पैरामीटर पर लागू होता है।

यह एक मुक्त समारोह है के रूप में, वहाँ कोई this है और वह संशोधक जरूरत नहीं है।

t पैरामीटर पहले से ही पैरामीटर सूची में अपनी ही const है।

12

एक सदस्य समारोह पर सीवी-क्वालीफायर निर्दिष्ट करता है कि this सूचक प्रकार indirected किया है const (या volatile, const volatile) और इसलिए सदस्य समारोह है कि योग्यता के साथ उदाहरणों पर कहा जा सकता है।

नि: शुल्क फ़ंक्शन (और कक्षा स्थैतिक फ़ंक्शंस) में this पॉइंटर नहीं है।

1

जैसा कि हम सभी जानते हैं, तर्क सूची के बाद const कीवर्ड इंगित करता है कि यह सूचक सूचकांक के लिए एक सूचक है।

एक गैर-सदस्यीय फ़ंक्शन है, यह कक्षा से संबंधित नहीं है, इसलिए विपरीत अंत त्रुटि के विपरीत कॉन्स्टेंस जोड़ें। समस्या का

समाधान: या तो एक वर्ग के सदस्य समारोह बन या const कीवर्ड स्थिरांक विपरीत छोर दूर करने के लिए है

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