C++ 11 wprowadza nowy zestaw prefiksów literowych (a nawet pozwala na definiowanie przez użytkownika sufiksów). Oprócz tego można bezpośrednio używać sekwencji ucieczkowych Unicode, aby zakodować określony symbol bez obawy o kodowanie.Literał ciągu Unicode
const char16_t* s16 = u"\u00DA";
const char32_t* s32 = U"\u00DA";
Ale mogę użyć sekwencje escape Unicode w wchar_t
ciąg literałów, jak również? Wydaje się, że jest to wada, jeśli nie było to możliwe.
const wchar_t* sw = L"\u00DA";
Wartość całkowitą sw[0]
będzie oczywiście zależeć od tego, co wchar_t
jest na konkretnej platformie, ale do wszystkich innych efektów, powinno to być przenośny, nie?
wierzę wartość 'sw [0]' zależy co 'wchar_t' jest na konkretnej platformie tylko do tego stopnia, jaki jest rozmiar 'wchar_t'. To znaczy. '\ u00DA' powinno zawsze skutkować pewnym kodowaniem Unicode (UTF-8, UTF-16, UTF-32) U + 00DA, nawet jeśli nie jest to normalne kodowanie platformy dla tego typu. – bames53
Faktycznie powyższe jest nieprawidłowe. Wdrożenie ma traktować uniwersalne nazwy postaci tak, jak byłoby to dosłowne. Więc jeśli implementacja tłumaczy znaki w literale łańcuchowym na zestaw znaków wykonawczych, powinna to również zrobić z UCN. Gwarantowane jest tylko kodowanie UTF, jeśli numer UCN znajduje się w literałach unikodowych (np. U8 "\ u00DA"). – bames53