हां और ना।
यह निर्भर करता है कि आप C ++ के किस संस्करण का उपयोग कर रहे हैं।
- C ++ 98 और C ++ 03
explicitप्रकार रूपांतरण ऑपरेटरों का समर्थन नहीं करते हैं
- लेकिन C ++ 11 करता है।
उदाहरण,
struct A
{
operator int() { return 100; }
explicit operator std::string() { return "explicit"; }
};
int main()
{
A a;
int i = a;
std::string s = a;
}
इसे संकलित करें g++ -std=c++0x, आपको यह त्रुटि मिलेगी:
prog.cpp: 13: 20: error: गैर-स्केलर प्रकार 'std :: string' में 'ए' से रूपांतरण का अनुरोध किया गया
ऑनलाइन डेमो: http://ideone.com/DJut1
लेकिन जैसे ही आप लिखते हैं:
std::string s = static_cast<std::string>(a);
त्रुटि दूर हो जाती है: http://ideone.com/LhuFd
BTW, C ++ 11 में, स्पष्ट रूपांतरण ऑपरेटर को "संदर्भ रूपांतरण ऑपरेटर" के रूप में संदर्भित किया जाता है यदि यह बूलियन में परिवर्तित हो जाता है । इसके अलावा, यदि आप निहित और स्पष्ट रूपांतरणों के बारे में अधिक जानना चाहते हैं, तो इस विषय को पढ़ें:
उम्मीद है की वो मदद करदे।
toString, बजायoperator std::string। बेशक, यह कुछ टेम्प्लेट के साथ समस्याएं पैदा कर सकता है। मैंने हमेशा उपयोग किया हैtoString, और इससे मुझे कभी कोई समस्या नहीं हुई, लेकिन मुझे लगता है कि यह आपकी कोडिंग शैली पर निर्भर कर सकता है।