सी ++ 03 दो वर्ण प्रकारों को परिभाषित करता है: char
और wchar_t
। (signed char
और unsigned char
पागलपन) को अनदेखा करने देता है।std :: u16cout क्यों गुम है?
इन दो वर्णों को std::basic_string
, std::basic_ostream
, आदि std::string/std::wstring
और std::ostream/std::wostream
पर लागू किया गया है।
धाराओं से मानक पुस्तकालय भी ग्लोबल्स std::cout
और std::wcout
परिभाषित करता है।
नया सी ++ 0x मानक दो और वर्ण प्रकार char16_t
और char32_t
परिभाषित करता है। हालांकि, केवल नए टाइपिफऔर std::u32string
हैं।
मानक आपूर्ति std::u16ostream
क्यों नहीं है? या std::u32cout
के बारे में कैसे?
आपको ऐसा क्यों लगता है कि इसकी आवश्यकता है? एक धारा बाइट्स का सिर्फ एक अनुक्रम है। क्या यह अलग-अलग प्रारूपों में स्ट्रीम लिखने और पढ़ने की संभावना कम करता है? नहीं। एक बार std :: ostream के साथ एक स्ट्रीम लिख सकता है और std :: u16stream के साथ पढ़ सकता है और धाराएं बस काम करेंगी (इसलिए गलत चीज़ करने से कोई अतिरिक्त सुरक्षा नहीं है)। तो सही प्रकार के ऑब्जेक्ट में स्ट्रीम पढ़ने के लिए responcability अभी भी प्रोग्रामर को पड़ता है क्योंकि आने वाली धारा के प्रकार (यह केवल बाइट्स का अनुक्रम) निर्धारित करने का कोई वास्तविक तरीका नहीं है। –
मान्य है, 'std :: u32cout' का उपयोग अक्सर होने की संभावना नहीं है। मैं केवल एक आवेदन के कंसोल आउटपुट को अंतर्राष्ट्रीयकरण की कल्पना कर सकता हूं। हालांकि, एक 'std :: u32ofstream' तुरंत उपयोगी होगा। –
@deft_code: मुझे नहीं लगता कि यह कैसे उपयोगी है। आपको अधिक जानकारी में व्याख्या करने की आवश्यकता होगी कि आपको लगता है कि यह उपयोगी क्यों है। आप स्ट्रीम में स्टोरेज प्रारूप को हार्डकोड कर रहे हैं, फिर भी आपके पास यह पता लगाने का कोई तरीका नहीं है कि धारा वास्तव में उस प्रारूप का उपयोग करके बनाई गई थी या नहीं। –