[...] तो इसका मतलब यह होगा कि ऑपरेटर एक bool रिटर्न [...]
नहीं, यह रिटर्न std::cin
(संदर्भ द्वारा)। कारण while(std::cin >> value);
काम करता है क्योंकि std::istream
(जो std::cin
का प्रकार है) में conversion operator है।
एक रूपांतरण ऑपरेटर मूल रूप से एक वर्ग को अंतर्निहित रूप से अनुमति देता है (यदि इसे किसी दिए गए प्रकार में परिवर्तित करने के लिए explicit
चिह्नित नहीं किया गया है)। इस मामले में, std::istream
अपनी operator bool
को वापस करने के लिए परिभाषित करता है कि कोई त्रुटि (आमतौर पर failbit
) हुई है;
[std::ios_base::operator bool()]
रिटर्न true
यदि धारा कोई त्रुटि नहीं है और मैं/हे कार्यों के लिए तैयार है। विशेष रूप से, !fail()
देता है।
explicit operator bool() const;
नोट से भले ही ऑपरेटर explicit
है (जो if (std::cin);
जैसी निहित रूपांतरण की अनुमति नहीं होना चाहिए), क्वालीफायर जब एक संदर्भ है कि एक bool
की आवश्यकता में इस्तेमाल किया नजरअंदाज कर दिया है, while
if
की तरह, लूप और for
लूप। हालांकि, अपवाद हैं, नियम नहीं।
यहाँ एक उदाहरण है:
if (std::cin >> value); //OK, a 'std::istream' can be converted into a 'bool', which
//therefore happens implicitly, without the need to cast it:
if (static_cast<bool>(std::cin >> value)); //Unnecessary
bool b = std::cin >> value; //Error!! 'operator bool' is marked explicit (see above), so
//we have to call it explicitly:
bool b = static_cast<bool>(std::cin >> value); //OK, 'operator bool' is called explicitly
'std :: cin' में एक रूपांतरण ऑपरेटर भी 'बूल' है जिसका उपयोग इस स्थिति में किया जाता है। –
@ πάνταῥεῖ टिप्पणियां टिप्पणियों के लिए हैं, जवाब नहीं। – Mego