यह एक स्ट्रीम देता है ताकि हम ऑपरेशन को श्रृंखलाबद्ध कर सकें।
लेकिन जब आप एक बूलियन संदर्भ में किसी ऑब्जेक्ट का उपयोग करते हैं तो संकलक एक रूपांतरण ऑपरेटर की तलाश करता है जो इसे एक प्रकार में परिवर्तित कर सकता है जिसे बूलियन संदर्भ में उपयोग किया जा सकता है।
इस मामले में धारा operator void*()
है। चूंकि इसका परिणाम एक सूचक में होता है, इसका उपयोग बुलियन संदर्भ में किया जा सकता है। जब इसे बुलाया जाता है तो त्रुटि झंडे की जांच करता है। यदि या तो असफलता या बैडबिट सेट की जाती है तो यह न्यूल लौटाती है जो गलत के बराबर होती है अन्यथा यह स्वयं को पॉइंटर देता है (या कुछ और मान्य है हालांकि आपको इस तथ्य का उपयोग नहीं करना चाहिए)।
तो आप किसी भी संदर्भ में एक धारा है कि एक बूलियन परीक्षण की आवश्यकता होगी का उपयोग कर सकते हैं:
if (stream >> x)
{
}
while(stream)
{
/* do Stuff */
}
ध्यान दें: यह बुरा विचार बाहर की दुनिया में धारा का परीक्षण और फिर पढ़ने/शरीर के अंदर यह करने के लिए लिखने के लिए है सशर्त/पाश कथन का। ऐसा इसलिए है क्योंकि पढ़ने का कार्य धारा को खराब कर सकता है। परीक्षण के हिस्से के रूप में पढ़ना आमतौर पर बेहतर होता है।
while(std::getline(steam, line))
{
// The read worked and line is valid.
}
स्रोत
2011-01-16 22:17:47
आईट्रीम और वापसी प्रकार है। – DumbCoder
हाँ, मुझे कहना चाहिए था कि मुझे पहले से ही पता है। लेकिन जाहिर है कि इसके बारे में कुछ अजीब बात है, क्योंकि कुछ प्रकार का सत्य या झूठा इसे से लिया गया है। –
यह या तो 'बूल' या' शून्य * 'ऑपरेटरों को अधिभारित करता है ताकि जब यह स्पष्ट रूप से if() स्थिति में डाला जाता है, तो यह वापस लौटा सकता है कि ईओएफ पहुंच गया है या नहीं – Cameron