2010-08-16 10 views
5

मैं boost::tribool की खोज कर रहा हूं और निम्नलिखित व्यवहार से हैरान था।बूस्ट :: tribool: अजीब व्यवहार, या बग?

{ 
using namespace boost; 

boost::tribool t(indeterminate); 

assert(t==indeterminate); // This assertion fails! 
} 

हालांकि, अगर मैं यह कर, ज़ोर से गुजरता है।

assert(indeterminate(t)); 

किसी भी मामले में कोई संकलक चेतावनी या त्रुटियां नहीं। किसी के पास यह अच्छी व्याख्या है कि यह क्यों होना चाहिए ??

उत्तर

11

मुझे लगता है कि इस सवाल का जवाब है documentation:

दो अनिश्चित मानों की तुलना का परिणाम अनिश्चित (सच नहीं) है - हम नहीं जानते कि क्या मान होते हैं, तो हम यह नहीं बता सकते कि वे बराबरी का;

indeterminate फ़ंक्शन का उपयोग यह जांचने के लिए किया जा सकता है कि क्या एक ट्रिबूल अनिश्चित स्थिति में है या नहीं।

+0

और चूंकि अनिश्चित रूप से उलझन में उलझन में परिवर्तित हो जाता है, तो जोर विफल हो जाता है। –

+1

"दो अनिश्चित मूल्यों की तुलना करने का परिणाम अनिश्चित है"। आउच। मुझे लगता है कि एक स्तर पर समझ में आता है, लेकिन यह मेरे लिए सहज नहीं है। – Roddy

+0

@ रोडी, ट्रिब्यून :: ऑपरेटर ==() के कार्यान्वयन को देखें क्या आप तैयार हैं? यह आदिवासी लौटाता है! मुझे उस व्यक्ति से नफरत है जो इस कोड को बढ़ावा देने के लिए सबमिट करता है: अच्छे प्रश्न के लिए डी +1, यह सहज ज्ञान युक्त व्यवहार नहीं है! –

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