यहां टिप्पणियों में - https://stackoverflow.com/a/9393138/8047 - मुझे पता चला कि BOOL
में int
मान से अपना मान सेट करते समय कुछ अनपेक्षित व्यवहार किया गया है। अधिकतर, यदि मान 0x1000
पर सेट किया गया है तो इसे FALSE
(आश्चर्यजनक रूप से) के रूप में मूल्यांकन किया जाता है।int मानों के प्रभाव "फिटिंग" नहीं - उद्देश्य-सी के लिए बूल या बूल?
NSLog(@"All zero? %d %d", (BOOL)0, (bool)0);
NSLog(@"All one? %d %d %d", (BOOL)4095, (BOOL)4096, (BOOL)4097); // 4096=0x1000 or 8-bits
NSLog(@"All one? %d %d %d", (bool)4095, (bool)4096, (bool)4097);
Produces:
All zero? 0 0
All one? -1 0 1
All one? 1 1 1
मुझे लगता है कि यह अजीब है, लेकिन फिर, मैं बहुत वैसे भी BOOL
को int
से डाली नहीं है। हालांकि:
- क्या यह दर्शाता है कि
bool
कोBOOL
पर प्राथमिकता दी जानी चाहिए? क्यों या क्यों नहीं? - यह ठीक
if (thatBool) {
उपयोग करने के लिए या एक
if (thatBool ? YES : NO) {
और क्यों पसंद करते हैं चाहिए?
नोट: यह इस प्रश्न का एक और विशिष्ट संस्करण है - Objective-C : BOOL vs bool - लेकिन मुझे लगता है कि यह इसमें जोड़ता है और डुप्लिकेट नहीं है।
'!!' कास्टिंग चाल पर कोई लिंक? इन चीजों को खोजने के लिए थोड़ा मुश्किल है :) –
यह एक साधारण [डबल अस्वीकृति] है (http://www.google.com/search?q=c+double+negation), जो खोजना आसान होना चाहिए। – zoul
धन्यवाद @zoul, हाँ यह काफी आसान है। मुझे लगता है कि 'खतरनाक प्रकार के लिए देखना' सही है। –