c++ - Why does bool and not bool both return true in this case? -


इस सवाल का पहले से ही एक उत्तर है: < 5 जवाब

यह मेरा कोड है:

  • / P>
      #include & lt; cstring & gt; # शामिल करें & lt; iostream & gt; int main () {bool a; मेम्सेट (& amp; ए, 0x03, आकारओफ़ (बूल)); अगर (ए) {std :: cout & lt; & lt; "एक सच है!" & Lt; & lt; std :: endl; } अगर (! ए) {std :: cout & lt; & lt; "! एक सच है!" & Lt; & lt; std :: endl; }}   

    यह आउटपुट करता है:

      a सच है! ! एक सच है!   

    ऐसा लगता है कि ! ऑपरेटर पर bool केवल अंतिम बिट को बदलता है, लेकिन हर मान जो बराबर नहीं होता 0 को सच के रूप में माना जाता है। यह दिखाए गए व्यवहार को जाता है, जो तार्किक रूप से गलत है क्या यह क्रियान्वयन में एक गलती है, या क्या विनिर्देश इस अनुमति देता है? नोट करें कि memset को छोड़ा जा सकता है, और व्यवहार शायद हो क्योंकि a में स्मृति कचरा होता है।

    मैं जीसीसी 4.4.5 पर हूं, अन्य कंपलर इसे अलग तरीके से कर सकते हैं।

    मानक (3. 9। 1/6 मौलिक प्रकार) का कहना है:

    टाइप बूल के मान या तो सत्य हैं या गलत हैं।

    ....

    एक बूल वैल्यू का उपयोग करना इस इंटरनेशनल स्टैंडर्ड द्वारा वर्णित तरीकों में "अनचाहे", "अपरिभाषित" जैसे कि एक अप्रकाशित स्वचालित ऑब्जेक्ट के मूल्य की जांच करके, यह ऐसा व्यवहार कर सकता है जैसे कि यह न तो सत्य है और न ही गलत है।

    आपके कार्यक्रम का memset का उपयोग अपरिभाषित व्यवहार के लिए इसका नतीजा यह हो सकता है कि मूल्य न तो सत्य है और न ही झूठी है।

  • Comments

    Popular posts from this blog

    Java - Error: no suitable method found for add(int, java.lang.String) -

    java - JPA TypedQuery: Parameter value element did not match expected type -

    c++ - static template member variable has internal linkage but is not defined -