"बूल के लिए परिवर्तनीय" का अर्थ केवल कुछ भी है जो अर्थपूर्ण रूप से एक बूलियन संदर्भ में उपयोग किया जा सकता है (उदाहरण के लिए if
स्थिति में)। यह अंतर्निहित रूपांतरणों में समझ में आता है। एक ऑब्जेक्ट की कल्पना करें जिसे आप बूलियन संदर्भ में उपयोग करना चाहते हैं, उदा। std::fstream
:
ifstream ifs("filename");
while (ifs >> token)
cout "token " << token << " read." << endl;
यहाँ, ifs
बूलियन के लिए परिवर्तनीय है। खैर, वास्तव में, यह नहीं है। इसके बजाय, यह किसी चीज़ के लिए परिवर्तनीय है जो बदले में परिवर्तनीय है bool
। इस तरह के बयानों को रोकने के लिए है:
int b = ifs;
तर्क है कि इस तरह का बयान सबसे शायद इरादा नहीं है और संकलक इसलिए यह को रोकने चाहिए। bool
की बजाय "कन्वर्टिबल टू बूल" लौटने से, यह हासिल किया जाता है क्योंकि दो उपयोगकर्ता परिभाषित निहित रूपांतरणों को एक अभिव्यक्ति में जंजीर नहीं किया जा सकता है।
इस संदर्भ में, आप safe bool idiom देख सकते हैं। क्रिस ने रिटर्न प्रकार के रूप में void*
का उपयोग करके पहले से ही एक संभावित कार्यान्वयन की ओर इशारा किया है। आमतौर पर, this
पॉइंटर का उपयोग true
का प्रतिनिधित्व करने के लिए किया जाता है। एसटीएल द्वारा इसका उपयोग किया जाता है। हालांकि, यह दुर्भाग्य से अभी भी त्रुटिपूर्ण है। कई विकल्पों का प्रस्ताव दिया गया है (ऊपर दिए गए आलेख में अच्छी तरह से लपेटा गया है) और जहां तक मुझे पता है, को भी विचार के लिए सी ++ 0x में शामिल किया गया है। हालांकि, मैं इन प्रस्तावों की वर्तमान स्थिति से अवगत नहीं हूं।
स्रोत
2008-11-04 20:26:52
यही वह लेख है जिसे मैं ढूंढ नहीं पाया था। धन्यवाद! –
वर्तमान स्थिति स्पष्ट रूपांतरण ऑपरेटर है, जो सुरक्षित बूल मुहावरे को अनिवार्य बनाती है। –
@ सेबेस्टियन, क्या यह? "अगर (एफ)" स्पष्ट ऑपरेटर बूल() को कॉल करेगा या आपको "अगर (बूल (एफ))" की आवश्यकता होगी? ऐसा नहीं है कि मानक पैरामीटर को परिभाषित करता है जैसे कि बूल होने के नाते, केवल बूल में परिवर्तनीय। – jmucchiello