बूलियन रूपांतरण के साथ कोई समस्या है। यह वाक्यविन्यास की अनुमति देता है जो लगभग हमेशा दर्द होता है।
सौभाग्य से, एक समाधान है: Safe Bool idiom।
bool
पर रूपांतरण के साथ समस्या यह है कि निहित रूपांतरण खतरनाक है।
std::auto_ptr<T> p = ..., q = ....;
if (p < q) // uh ?
इसलिए, operator bool() const
एक abomination है। या तो आप एक स्पष्ट विधि प्रदान करते हैं ... या आप सुरक्षित बूल मुहावरे का उपयोग करते हैं।
मुहावरे का विचार आपको एक प्रकार का उदाहरण देना है जो संचालन के एक बहुत ही कम से कम सबसेट के साथ है और लगभग कोई मामला नहीं है जहां निहित रूपांतरण आपको परेशानी में डाल देगा। यह सदस्य समारोह में सूचक का उपयोग करके किया जाता है।
if (p)
और if (!p)
जैसे ऑपरेशंस, तो समझ में आता है, लेकिन if (p < q)
संकलित करने में विफल हो जाएगा।
पूर्ण समाधान के लिए लिंक को पूरी तरह से पढ़ें, और आपको पता चलेगा कि operator bool() const
नहीं होने का अच्छा विचार क्यों था।
स्रोत
2010-06-30 17:24:27
प्रश्न http://stackoverflow.com/q/2953530/427532 कुछ हद तक संबंधित है। –