C के पुराने दिनों में, कोई बूलियन प्रकार नहीं था। लोग int
बूलियन डेटा संग्रहीत करने के लिए उपयोग करते थे, और यह ज्यादातर काम करता था। ज़ीरो झूठ था और बाकी सब सच था।
इसका मतलब यह था कि अगर आपने एक लिया int flag = 0;
और बाद में किया flag++
तो मूल्य सही होगा। इससे कोई फर्क नहीं पड़ता कि ध्वज का मूल्य क्या था (जब तक कि आपने इसे बहुत अधिक नहीं किया था, यह लुढ़का हुआ था और आप शून्य पर वापस आ गए, लेकिन इसे अनदेखा करते हैं) - ध्वज को बढ़ाते हुए जब उसका मूल्य 1 था तो 2 देंगे, जो अभी भी था सच।
कुछ लोगों ने इसका इस्तेमाल बिना शर्त मूल्य को सच मानने के लिए किया। मुझे यकीन नहीं है कि यह कभी मुहावरेदार हो गया है , लेकिन इसके कुछ कोड में।
इसके लिए कभी काम नहीं किया गया --
, क्योंकि यदि मूल्य 1 के अलावा कुछ भी था (जो यह हो सकता है), तो मूल्य अभी भी गलत नहीं होगा। और अगर यह पहले से ही गलत था ( 0
) और आपने इस पर एक डिक्रीमेंट ऑपरेटर किया, तो यह गलत नहीं होगा।
जब शुरुआती दिनों में C से C ++ में कोड बढ़ रहा था, तो यह बहुत महत्वपूर्ण था कि C ++ में शामिल C कोड अभी भी काम करने में सक्षम था। और इसलिए C ++ के लिए विनिर्देशन में (खंड ५.२.६ (पृष्ठ )१ पर)) यह पढ़ता है:
पोस्टफ़िक्स ++ लागू करने से प्राप्त मूल्य वह मान है जो ऑपरेटर को लागू करने से पहले ऑपरेटर के पास था। [नोट: प्राप्त मूल्य मूल मूल्य की एक प्रति है] ऑपरेंड एक परिवर्तनीय अंतराल होगा। ऑपरेंड का प्रकार एक अंकगणितीय प्रकार या पूर्ण ऑब्जेक्ट प्रकार के लिए एक सूचक होगा। परिणाम नोट किए जाने के बाद, ऑब्जेक्ट का मान 1 में जोड़कर संशोधित किया जाता है, जब तक कि ऑब्जेक्ट प्रकार का नहीं होता है bool
, जिस स्थिति में यह सही पर सेट होता है। [नोट: इस उपयोग को हटा दिया गया है, देखें अनुलग्नक डी।]
पोस्टफिक्स का ऑपरेंड - पोस्टफिक्स ++ ऑपरेटर के अनुरूप समान रूप से घटाया जाता है, सिवाय इसके कि ऑपरेंड टाइप का नहीं होगा bool
।
यह फिर से खंड 5.3.2 में वर्णित है (उपसर्ग ऑपरेटर के लिए - 5.2.6 पोस्टफिक्स पर था)
जैसा कि आप देख सकते हैं, यह पदावनत है (दस्तावेज़ 709 में अनुलग्नक डी) और इसका उपयोग नहीं किया जाना चाहिए।
लेकिन ऐसा क्यों। और कभी-कभी आप कोड देख सकते हैं। लेकिन यह मत करो।