is_unsigned
[meta.unary.comp] में/2 के रूप में
तो is_arithmetic<T>::value
true
,
bool_constant<T(0) < T(-1)>::value
रूप में एक ही परिणाम है परिभाषित किया गया है; अन्यथा, false
bool
† स्पष्ट रूप से एक अंकगणितीय प्रकार (अभिन्न जा रहा है) है। अब विचार करना [conv.bool]/1:
एक शून्य मान, नल पॉइंटर मूल्य, या अशक्त सदस्य सूचक मूल्य false
में बदल जाती है; कोई अन्य मान true
में परिवर्तित कर दिया गया है।
आईई। bool(0) < bool(-1)
false < true
के समतुल्य है, और बाद में यह मानता है कि मानों को 0
और 1
पर क्रमशः प्रचारित किया जाता है।
इस प्रकार is_unsigned<bool>::value
true
है (और, इसके विपरीत, is_signed
false
है) तथ्य यह है कि bool
EAN मूल्यों अंकगणितीय आपरेशनों के दौरान अहस्ताक्षरित मूल्यों 0
और 1
के अनुरूप होने की वजह से। हालांकि, यह वास्तव में bool
की हस्ताक्षर का आकलन करने के लिए समझ में नहीं आता है, इस पर make_unsigned
बहुत कम प्रदर्शन करता है, क्योंकि यह पूर्णांक का प्रतिनिधित्व नहीं करता है, बल्कि राज्यों का प्रतिनिधित्व करता है।
†
: तथ्य यह है कि इस टेम्पलेट पहली जगह में bool
के लिए लागू है इसकी आवश्यकता खंड जा रहा है न के बराबर, bool
नहीं किया जा रहा से निर्धारित होता है एक अधूरी प्रकार ([res.on.functions]/(2.5)) और यूनरी टाइप टाइप के लिए [meta.rqmts] में कोई अन्य आवश्यकताएं नहीं दी जा रही हैं।
थोड़ा नाइटपिक: "मान क्रमशः 0 और 1 तक प्रचारित होते हैं" 100% सही नहीं है। रूपांतरण नियम (4.12) कहते हैं कि एक शून्य पूर्णांक मान 'झूठा' में बदल जाता है और _any अन्य_ मान 'सत्य' में परिवर्तित होता है (कोई भी 1 शामिल नहीं है)। मानक एक रूपांतरण को पूर्णांक में भी परिभाषित करता है जहां 'सत्य' _convert_ से 1 होगा, और 'false' _convert_ से 0 होगा, हालांकि यह वास्तव में मूल्यों के बारे में कुछ भी नहीं कहता है। हम सभी जानते हैं, 'सत्य' 67 हो सकता है और 'झूठा' 172 हो सकता है (यह लगभग निश्चित रूप से मामला कभी नहीं है, लेकिन मानक के अनुसार, यह हो सकता है)। अभी भी +1 – Damon
@ डैमन प्रतीक्षा करें, मैं नहीं देखता कि आपकी टिप्पणी मेरी वाक्य पर कैसे लागू होती है। मैंने अभिन्न पदोन्नति के दौरान 0 और 1 को पदोन्नत किए जाने वाले मानों को संदर्भित किया है, जिन्हें 'झूठा <सत्य' का मूल्यांकन करते समय लागू किया जा रहा है। वहां कुछ भी गलत नहीं है। मूल्य प्रतिनिधित्व के बारे में कोई भी बात नहीं कर रहा है (अभी तक)। – Columbo
मेरा मतलब यह है कि 'बूल (-1)' तुरंत 'सत्य' में परिवर्तित हो जाता है, इसमें शामिल 1 को कोई अभिन्न प्रचार नहीं होता है। कोई गैर-शून्य मान तुरंत 'सत्य' में परिवर्तित हो जाता है। इस प्रकार, 'बूल (0) <बूल (-1)' बिल्कुल 'झूठी <सच' के समान है, कोई 1 शामिल नहीं है। मुझे पता है, यह एक नाइटपिक है ... :-) मैंने ज्यादातर उल्लेख किया क्योंकि बहुत से लोग 'true == 1' मानते हैं, और "वहां' 1' में कनवर्ट करें" दिखाई देने वाले अवांछित पाठक को सुझाव दे सकता है कि यह वास्तव में है मामला। – Damon