मुझे उन स्थितियों को समझने में कुछ परेशानी हो रही है, जिनमें सी ++ एक अंतर्निहित रूपांतरण का उपयोग करेगा। मान लीजिए मैं एक वर्ग है:सी ++ मानक ऑपरेटरों के लिए ऑपरेटरों में अंतर्निहित रूपांतरण
class SomeClass
{
private:
int val;
public:
SomeClass(int i) :val{ i } {}
operator string() { return to_string(val); }
};
यह क्यों है कि जब ऑपरेटरों मैं स्ट्रिंग के लिए कास्ट करने के लिए की जरूरत के साथ इस वर्ग का उपयोग कर? यह सिर्फ रूपांतरण को निष्पादित क्यों नहीं करता है?
कोड:
int main(void)
{
SomeClass sc = 4;
cout << (string)sc << endl; //prints 4, compiles fine
cout << sc << endl;//does not compile, no operator "<<" matches these operands
string str1 = sc;//compiles fine, performs cast
string str2 = "Base String" + sc;//does not compile, no operator "+" matches these operands
}
यह सवाल व्यावहारिक से अधिक शैक्षिक सिर्फ एक डाली का उपयोग कर के रूप में है वैसे भी अधिक पठनीय है।
तो फिर, सी ++ मानक लाइब्रेरी फ़ंक्शंस (बिना बगैर) के साथ अधिक संगत होने के लिए, मुझे 'basic_string' पर निहित रूपांतरण लिखना चाहिए और स्ट्रिंग नहीं करना चाहिए? –
@ApoorvaKharche No, 'string'' basic_string' के एक विशेष तत्कालता के लिए एक टाइपिफ़ है। चाहे 'ऑपरेटर <<' 'basic_string 'के संदर्भ में लिखा गया हो या' स्ट्रिंग' के संदर्भ में कोई फर्क नहीं पड़ता है, क्योंकि उनका मतलब एक ही चीज़ है। चाहे 'ऑपरेटर <<' 'basic_string ' या 'basic_string 'के संदर्भ में लिखा गया है, जहां' टी' को कम किया जाना है, इससे कोई फर्क पड़ता है, और आपके पास अपनी कक्षा से इसका कोई नियंत्रण नहीं है। –
hvd