[C++] सी ++ 11 में स्ट्रिंग लीटरल्स के लिए यूनिकोड एन्कोडिंग


Answers

Question

संबंधित प्रश्न के बाद, मैं सी ++ 11 में नए चरित्र और स्ट्रिंग के शाब्दिक प्रकारों के बारे में पूछना चाहता हूं। ऐसा लगता है कि हमारे पास अब चार प्रकार के वर्ण हैं और पांच प्रकार की स्ट्रिंग लीटरल हैं। चरित्र प्रकार:

char     a =  '\x30';         // character, no semantics
wchar_t  b = L'\xFFEF';       // wide character, no semantics
char16_t c = u'\u00F6';       // 16-bit, assumed UTF16?
char32_t d = U'\U0010FFFF';   // 32-bit, assumed UCS-4

और स्ट्रिंग लीटरल्स:

char     A[] =  "Hello\x0A";         // byte string, "narrow encoding"
wchar_t  B[] = L"Hell\xF6\x0A";      // wide string, impl-def'd encoding
char16_t C[] = u"Hell\u00F6";        // (1)
char32_t D[] = U"Hell\U000000F6\U0010FFFF"; // (2)
auto     E[] = u8"\u00F6\U0010FFFF"; // (3)

सवाल यह है: क्या \x / \u / \U अक्षर सभी स्ट्रिंग प्रकारों के साथ स्वतंत्र रूप से संयोजन योग्य हैं? क्या सभी स्ट्रिंग प्रकार निश्चित-चौड़ाई हैं, यानी सरणियों में सटीक रूप से कई तत्व मौजूद हैं, जैसे कि शाब्दिक रूप में दिखाई देते हैं, या \x / \u / \U संदर्भ में बाइट्स की एक चर संख्या में विस्तार हो जाता है? क्या u"" और u8"" स्ट्रिंग्स में एन्कोडिंग शब्दार्थ हैं, जैसे मैं कह सकता हूँ char16_t x[] = u"\U0010FFFF" , और गैर-बीएमपी char16_t x[] = u"\U0010FFFF" को दो-यूनिट UTF16 अनुक्रम में एन्कोड किया जाता है? और इसी तरह u8 ? (1) में, क्या मैं अकेला अकेला \u u0026 लिख सकता हूं? अंत में, कोई भी स्ट्रिंग फ़ंक्शन एन्कोडिंग जागरूक (यानी वे चरित्र-जागरूक हैं और अमान्य बाइट अनुक्रमों का पता लगा सकते हैं)?

यह एक ओपन एंडेड प्रश्न का एक सा है, लेकिन मैं नई सी ++ 11 की नई यूटीएफ-एन्कोडिंग और टाइप सुविधाओं की संभव के रूप में एक तस्वीर को पूरा करना चाहूंगा