c++ - Can "signed char" and "unsigned char" always be cast to each other without loss of data? -


सी ++ में हमारे पास हस्ताक्षरित अक्षर और हस्ताक्षरित अक्षर हो सकते हैं एक ही आकार के हैं, लेकिन मूल्यों की अलग-अलग श्रेणियां हैं।

निम्नलिखित कोड में:

  हस्ताक्षरित हस्ताक्षरित क्रो = = 10; अहस्ताक्षरित चार हस्ताक्षरित क्रश = स्थैतिक_कास्ट & lt; अहस्ताक्षरित चार & gt; (हस्ताक्षरित खरीदार); हस्ताक्षरित व्यापारी = स्थिर_का & लेफ्टिनेंट; हस्ताक्षरित चार & gt; (हस्ताक्षरित खरीदार);  

होगा हस्ताक्षरित चार इसके मूल मूल्य क्या है, इसके मूल्य को बनाए रखने

नहीं, ऐसी कोई गारंटी नहीं है से हस्ताक्षरित अक्षर से हस्ताक्षरित चार पर रूपांतरण अच्छी तरह से परिभाषित है, क्योंकि सभी सी-+ (और सी) में हस्ताक्षरित-से-अहस्ताक्षरित अभिन्न रूपांतरण हैं। हालांकि, उस रूपांतरण का परिणाम मूल हस्ताक्षरित प्रकार की सीमा से बाहर हो सकता है (आपके कोड में -10 के साथ होगा)।

रिवर्स रूपांतरण का परिणाम - अहस्ताक्षरित चार से हस्ताक्षरित अक्षर - उस स्थिति में कार्यान्वयन-परिभाषित है, जैसा कि सभी हस्ताक्षरित-से-हस्ताक्षरित हैं सी ++ (और सी) में अभिन्न रूपांतरण हैं। इसका मतलब है कि परिणाम भाषा के नियमों से अकेले भविष्यवाणी नहीं की जा सकती।

आम तौर पर, आप कार्यान्वयन की अपेक्षा कर सकते हैं ताकि इसे "परिभाषित" किया जा सके ताकि मूल हस्ताक्षरित चार मान बहाल हो जाए। लेकिन भाषा उस बारे में कोई गारंटी नहीं देती है।


Comments