मान लीजिए कि हमारे पास 3 चर हैं और हमें यह सुनिश्चित करने की आवश्यकता है कि वे या तो सभी बराबर -1 हो सकते हैं या न ही 1 के बराबर हो सकते हैं। मैंने निम्नलिखित कोड लिखा:ट्रिपल समानता अभिव्यक्ति मूल्यांकन
x := 1;
y := 1;
z := 1;
ASSERT((x = -1) = (y = -1) = (z = -1));
मैं अक्सर इस तरह की जांच लिखता हूं, लेकिन दो चर के लिए। आश्चर्यजनक रूप से ट्रिपल तुलना भी संकलित, लेकिन यह उम्मीद के रूप में काम नहीं करता है। (1, 1, 1) मानों के लिए मैं उम्मीद करता हूं कि यह सत्य पर मूल्यांकन करे। चर मान और सरलीकरण के प्रतिस्थापन के बाद हम पाते हैं:
ASSERT(False = False = False);
और मैंने सोचा कि यह सही पर मूल्यांकन करना चाहिए, लेकिन ऐसा नहीं है। तो यह ट्रिपल तुलना का मूल्यांकन कैसे किया जाता है?
न तो? 3 स्थितियों के साथ यह कैसे संभव है? अभिव्यक्ति की अजीबता के लिए –
+1! यदि आपके पास बूलियन मानों के अलावा कुछ और था तो आपको 'असंगत प्रकार' कंपाइलर त्रुटि मिल जाएगी; और मुझे लगता है कि यह एक कोने-केस है क्योंकि बुलेन मानों की शायद ही कभी '=' ऑपरेटर से तुलना की जाती है। –
कुछ भी अजीब नहीं है, झूठी = झूठी सच के बराबर होती है, और सही <> झूठी –