संबंधित प्रश्न के बाद , मैं C ++ 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"
, और गैर-बीएमपी कोडपॉइंट दो-इकाई UTF16 अनुक्रम में एन्कोड हो जाता है? और इसी तरह के लिए u8
? (1) में, क्या मैं अकेला सरोगेट लिख सकता हूँ \u
? अंत में, किसी भी स्ट्रिंग फ़ंक्शंस को जागरूक करना (यानी वे चरित्र-जागरूक हैं और अमान्य बाइट अनुक्रमों का पता लगा सकते हैं)?
यह एक खुले-समाप्त प्रश्न का एक सा है, लेकिन मैं नए UTF-एन्कोडिंग और नए C ++ 11 के प्रकार की सुविधाओं के रूप में संभव के रूप में एक चित्र प्राप्त करना चाहता हूं।
u"\U0010FFFF"
एक सरोगेट जोड़ी में शामिल है।