2012-12-04 12 views
5

अपने सिस्टम, wchar_t और पूर्णांक पर एक ही गुणों के साथ अलग प्रकार के होते हैं:क्या wchar_t किसी भी पूर्णांक प्रकार से अलग होने की गारंटी है?

#include <type_traits> 
sizeof(wchar_t) == sizeof(int) == 4 
std::is_signed<wchar_t> == std::is_signed<int> == std::true_type 
std::is_same<wchar_t, int> == std::false_type 

इसके विपरीत (, एक ही गुण और is_same सच है) ptrdiff_t और long int समान प्रकार के होते हैं,।

क्या यह wchar_t की यह विशिष्टता है? क्या सभी प्रणालियों पर wchar_t और int के लिए अधिभार सुरक्षित है? क्या कोई ऐसी संपत्ति है या कहीं और wchar_t और is_same के साथ संबंधित int संपत्ति को अलग करता है?

(सिस्टम जानकारी: मुझे सामान्य मामले में दिलचस्पी है, लेकिन अब तक मेरे परीक्षण ओएस एक्स मशीन चल रहे हैं जी ++ 4.8.0 और ऐप्पल क्लैंग ++ 4.1, दोनों -std = C++ 11 के साथ।)

उत्तर

9

हाँ, wchar_t अलग प्रकार (§3.9.1/5) होने की गारंटी है:

प्रकार wchar_t अलग प्रकार जिनके मान सबसे बड़ा विस्तारित वर्ण सेट के सभी सदस्यों के लिए विशिष्ट कोड का प्रतिनिधित्व कर सकते है समर्थित लोकेशंस के बीच निर्दिष्ट (22.3.1)।

तो हाँ, यह सुरक्षित wchar_t और int सभी सिस्टम पर के लिए ओवरलोड है।

हालांकि, wchar_t भी एक और अभिन्न प्रकार है, जो अपनी अंतर्निहित प्रकार है के रूप में एक ही आकार, signedness और संरेखण आवश्यकताओं है करने के लिए गारंटी है। यह आवश्यक नहीं है int लेकिन आपके मामले में ऐसा प्रतीत होता है। इसका मतलब है wchar_t शायद अभिन्न प्रकारों में से एक का उपयोग करके कार्यान्वित किया गया है, लेकिन जहां तक ​​आप चिंतित हैं, उन्हें पूरी तरह से अलग प्रकार के रूप में माना जाता है।

+0

लघु, मीठा और बिंदु पर। जैसे ही एसओ मुझे देता है, मैं जवाब स्वीकार करूंगा। – addaon

8

हाँ, सी ++ 11 के लिए, wchar_t अपने स्वयं का प्रकार है, जो कि किसी अन्य से अलग है, लेकिन जैसा कि आपने देखा है, इसमें एक ही सीमा, हस्ताक्षर, इत्यादि भी होगी, जैसे कि किसी अन्य प्रकार (§3.9 .1/3):

टाइप wchar_t एक विशिष्ट प्रकार है जिसका मूल्य समर्थित लोकल (22.3.1) के बीच निर्दिष्ट सबसे बड़े विस्तारित वर्ण सेट के सभी सदस्यों के लिए अलग-अलग कोड का प्रतिनिधित्व कर सकता है। टाइप करें wchar_t के समान आकार, हस्ताक्षर, और संरेखण आवश्यकताओं (3.11) के अन्य अभिन्न प्रकारों में से एक के रूप में, जिसका अंतर्निहित प्रकार होगा।

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