후속 관련된 질문 , 나는 C ++ 11의 새로운 문자 및 문자열 리터럴 유형에 대해 묻고 싶습니다. 이제 4 가지 종류의 문자와 5 가지 종류의 문자열 리터럴이있는 것 같습니다. 문자 유형 :
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"
, 그리고 비 BMP 코드 포인트는 두 단위 UTF16 순서로 인코딩됩니다? 그리고 비슷하게 u8
? (1)에서 외로운 대리자를 쓸 수 \u
있습니까? 마지막으로 인코딩을 인식하는 문자열 함수가 있습니까 (즉, 문자를 인식하고 유효하지 않은 바이트 시퀀스를 감지 할 수 있음)?
이것은 약간의 개방형 질문이지만 새로운 C ++ 11의 새로운 UTF 인코딩 및 유형 기능에 대해 가능한 한 완전한 그림을 얻고 싶습니다.
u"\U0010FFFF"
서로 게이트 쌍으로 인코딩 합니다.