हां और ना।
यह निर्भर करता है कि आप 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
, और इससे मुझे कभी कोई समस्या नहीं हुई, लेकिन मुझे लगता है कि यह आपकी कोडिंग शैली पर निर्भर कर सकता है।