मैं यह सुनिश्चित करना चाहता हूं कि मैं पास-बाय-वैल्यू बनाम पास-बाय-रेफरेंस को सही ढंग से समझूं। विशेष रूप से, मैं किसी ऑब्जेक्ट के लिए वृद्धि ++
ऑपरेटर के उपसर्ग/पोस्टफिक्स संस्करणों को देख रहा हूं।उपसर्ग/पोस्टफिक्स वृद्धि ऑपरेटर
चलिए मान लीजिए हम निम्नलिखित वर्ग X
है:,
class X{
private:
int i;
public:
X(){i=0;}
X& operator ++(){ ++i; return *this; } //prefix increment
X operator ++ (int unused){ //postfix increment
X ret(*this);
i++;
return ret;
}
operator int(){ return i; } //int cast
};
सबसे पहले मैं उपसर्ग/पोस्टफ़िक्स वेतन वृद्धि ऑपरेटरों ठीक से लागू किया गया है?
दूसरा, उपसर्ग ऑपरेटर की तुलना में पोस्टफिक्स ऑपरेटर कितना मेमोरी-कुशल है? विशेष रूप से कितने X
ऑब्जेक्ट प्रतियां बनाई जाती हैं जब ऑपरेटर के प्रत्येक संस्करण का उपयोग किया जाता है?
रिटर्न-बाय-रेफरेंस बनाम रिटर्न-बाय-वैल्यू के साथ वास्तव में क्या होता है, इसकी व्याख्या मुझे समझने में मदद कर सकती है।
संपादित करें: उदाहरण के लिए, निम्न कोड के साथ ...
X a;
X b=a++;
... ए और बी अब उपनाम कर रहे हैं?
पोस्टफिक्स ऑपरेटर में पोस्टफिक्स-वृद्धि 'i' पोस्ट करने की कोई आवश्यकता नहीं है। असल में, मैं [फ्रेडओवरफ्लो सुझाव देता हूं] (http://stackoverflow.com/questions/3181211/3181359#3181359) और उपसर्ग संस्करण को कॉल करता हूं। आईएमओ जो वास्तव में वृद्धि को फिर से कार्यान्वित करने से अधिक मूर्खतापूर्ण है (भले ही कार्यान्वयन यहां छोटा हो)। _ और उस अंतर्निहित रूपांतरण ऑपरेटर से छुटकारा पाएं ._ यह आपको अन्यथा चोट पहुंचाने जा रहा है। (तीसरे और आखिरी बार मैंने एक निहित रूपांतरण ऑपरेटर लिखा था 2001 में और एक या दो साल बाद मुझे पता चला कि इससे सूक्ष्म बग पैदा हुईं और इसे हटा दिया गया - जैसे सभी पहले। बीटीडीटीजीटीएलएस।) – sbi