2015-06-21 2 views
10

मैं सी ++ में बिल्टिन bool प्रकार के कुछ व्यवहार के बारे में उत्सुक हूं। जैसा कि मैं इसे समझता हूं, std::common_type निहित परिवर्तनीयता का उपयोग करके सामान्य प्रकार निर्धारित करता है। मैं उम्मीद करता हूं कि bool और एक अन्य प्रकार के साथ एक अभिव्यक्ति बूल को उस प्रकार में परिवर्तित करने का कारण बनती है। उदाहरण के लिए, मैं देख सकता हूं कि bool + float ->float और bool + double ->double। हालांकि, bool + int8_t ->int32_t और bool + int16_t ->int32_t। यह एक केस क्यों है?सी ++ में सामान्य प्रकार का बूल और int8_t int32_t क्यों है?

उत्तर

10

संक्षिप्त उत्तर: अभिन्न पदोन्नति

संख्यात्मक गणित में, (सहित bool, char, unsigned char, signed char, short, unsigned short, आदि) छोटे अभिन्न प्रकार int करने के लिए प्रोत्साहित कर रहे हैं के लिए सभी संभव मूल्यों int में फिट, अन्यथा वे unsigned int करने के लिए प्रोत्साहित कर रहे हैं।

आज अधिकांश मशीनों पर int32_tint जैसा ही है। bool + int8_t या bool + int16_t के मामले में, दोनों को int पर पदोन्नत किया जाता है।

+0

धन्यवाद यू हाओ! एक दम बढ़िया। क्या आप जानते हैं कि मानक में इसका उल्लेख कहां है? – user2333829

+1

@ user2333829 * §4.5 इंटीग्रल प्रोन्नति * –

+0

धन्यवाद, आपने मेरे प्रश्न का उत्तर दिया! मुझे वह अजीब लगता है, लेकिन यह स्पष्ट रूप से वहां है। – user2333829

संबंधित मुद्दे