Są tu dwie kwestie. Pierwszym z nich są dozwolone znaki w kodzie C++ (i komentarzach), takie jak nazwy zmiennych. Drugi to dozwolone znaki w łańcuchach i literałach łańcuchowych.
Jak wspomniano, kompilatory C++ muszą obsługują bardzo ograniczony zestaw znaków oparty na ASCII dla znaków dozwolonych w kodzie i komentarzach. W praktyce ten zestaw znaków nie działał zbyt dobrze z niektórymi europejskimi zestawami znaków (a zwłaszcza z niektórymi europejskimi klawiszami, które nie miały kilku znaków - jak nawiasy kwadratowe - dostępne), więc pojęcie digrafów i trigrafów było wprowadzony. Wiele kompilatorów akceptuje teraz więcej niż ten zestaw znaków, ale nie ma żadnej gwarancji.
Co do łańcuchów i literałów łańcuchowych, C++ ma pojęcie szerokiego łańcucha znaków i szerokiego łańcucha znaków. Jednak kodowanie tego zestawu znaków jest niezdefiniowane. W praktyce prawie zawsze jest to Unicode, ale nie sądzę, że jest tu jakakolwiek gwarancja. Literały łańcuchowe o szerokich ciągach znaków wyglądają jak literały literowe L ", a te mogą być przypisane do std :: wstring.
C++ 11 dodaje wyraźne wsparcie dla Unicode i napisowych, zakodowany jako UTF-8, UTF-16 big endian, UTF-16 little endian, UTF-32 big endian i UTF-32 little endian .
* RE: "cokolwiek to się nazywa": * [Z Wikipedii] (https://en.wikipedia.org/wiki/Plane_%28Unicode%29#Basic_Multilingual_Plane): Pierwszy samolot, ** samolot 0 **, the ** Basic Multilingual Plane (BMP) ** zawiera znaki dla prawie wszystkich współczesnych języków i dużą liczbę symboli. Podstawowym celem BMP jest wspieranie ujednolicenia wcześniejszych zestawów znaków oraz znaków do pisania. Większość przypisanych punktów kodowych w BMP służy do kodowania znaków ** chińskich **, ** japońskich ** i ** koreańskich (CJK) **. – DavidRR