2010-06-15 25 views

उत्तर

13

यह एक कास्ट ऑपरेटर है। इस प्रकार को परिभाषित करने वाली कोई भी कक्षा कहीं भी std::string की आवश्यकता हो सकती है। उदाहरण के लिए,

class Foo { 
public: 
    operator std::string() const { return "I am a foo!"; } 
}; 
... 
Foo foo; 
std::cout << foo; // Will print "I am a foo!". 

कास्ट ऑपरेटरों, एक बुरा विचार लगभग हमेशा से रहे हैं के बाद से वहाँ हमेशा एक ही परिणाम प्राप्त करने के लिए एक बेहतर तरीका है। उपर्युक्त मामले में, आप operator<<(std::ostream&, const Foo&) को परिभाषित करने से बेहतर हैं।

+9

मैं "हमेशा" शब्द पर ऑब्जेक्ट करता हूं, यह बहुत पूर्ण है। मुझे लगता है कि "आमतौर पर" एक बेहतर शब्द होगा। –

+1

मार्टिन, मैंने "हमेशा" नहीं कहा। मैंने कहा "लगभग हमेशा" जो पूर्ण नहीं है, और आईएमओ है, "आमतौर पर" की तुलना में सत्य के करीब। –

+10

लोकी, आपकी अपनी टिप्पणी बहुत पूर्ण है। क्या हमेशा * हमेशा "शब्द" से बचें, या एक * आमतौर पर * हमेशा "शब्द" से बचें? – Alyoshak

20

यह conversion operator है जो वस्तु को स्पष्ट रूप से या स्पष्ट रूप से std :: string पर डालने की अनुमति देता है। जब ऐसी कास्ट होती है, ऑपरेटर को बुलाया जाता है और कलाकार का नतीजा आमंत्रण का परिणाम होता है।

एक निहित कलाकार के उदाहरण के रूप में, मान लीजिए कि आपके पास एक ऐसा कार्य था जिसने std::string या const std::string& स्वीकार किया, लेकिन दिए गए ऑब्जेक्ट प्रकार को स्वीकार नहीं किया। उस फ़ंक्शन पर अपनी ऑब्जेक्ट को पास करने के परिणामस्वरूप रूपांतरण ऑपरेटर को बुलाया जाएगा, जिसके परिणामस्वरूप आपके प्रकार के बजाय फ़ंक्शन को पास किया जाएगा।

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