C में वर्ण प्रकार: विशिष्ट या समतुल्य?
C में, वर्ण प्रकार (चार) का व्यवहार कभी-कभी भिन्न हो सकता है हस्ताक्षरित और अहस्ताक्षरित पूर्णांक, जिससे भ्रम पैदा होता है। विशेष रूप से, निम्नलिखित कोड इस अंतर को प्रदर्शित करता है:
#include
typedef signed char int8;
typedef unsigned char uint8;
struct TrueType {};
struct FalseType {};
template
struct isX
{
typedef typename T::ikIsX ikIsX;
};
template struct isX { typedef FalseType ikIsX; };
template struct isX { typedef FalseType ikIsX; };
template struct isX { typedef FalseType ikIsX; };
template bool getIsTrue();
template bool getIsTrue() { return true; }
template bool getIsTrue() { return false; }
int main(int, char **t )
{
cout ::ikIsX >() ::ikIsX >() ::ikIsX >() यह कोड संकलित होता है लेकिन चार के लिए int8 और uint8 की तुलना में भिन्न परिणाम उत्पन्न करता है। ऐसा इसलिए है क्योंकि C चार, हस्ताक्षरित चार और अहस्ताक्षरित चार को तीन अलग-अलग प्रकारों के रूप में मानता है।
इसके विपरीत, int और uint32 समकक्ष प्रकार हैं:
template struct isX { typedef FalseType ikIsX; };
template struct isX { typedef FalseType ikIsX; };
यह अंतर इस तथ्य से उत्पन्न होता है कि चार का उपयोग ऐतिहासिक रूप से वर्णों का प्रतिनिधित्व करने और संख्यात्मक मानों को संग्रहीत करने दोनों के लिए किया गया है। नतीजतन, सी सादे चार को एक अलग प्रकार के रूप में मानकर पिछड़ी संगतता बनाए रखता है, जो कि int से अलग है। प्रदान किया। यदि यह सत्य है, तो char एक हस्ताक्षरित प्रकार के रूप में व्यवहार करता है; अन्यथा, यह एक अहस्ताक्षरित प्रकार के रूप में व्यवहार करता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3