char、wchar_t、char8_t、char16_t、char32_t

charwchar_tchar8_tchar16_tchar32_t の各型は組み込み型であり、英数字、非英数字グリフ、非印刷文字を表します。

構文

char     ch1{ 'a' };  // or { u8'a' }
wchar_t  ch2{ L'a' };
char16_t ch3{ u'a' };
char32_t ch4{ U'a' };

解説

char 型は、もともとは C および C++ の文字型でした。 char 型を使用して、ASCII 文字セットの文字または ISO-8859 のいずれかの文字セットの文字、および Shift-JIS や Unicode 文字セットの UTF-8 エンコードなどのマルチバイト文字の個々のバイトを格納できます。 Microsoft コンパイラでは、char は 8 ビット型です。 これは、signed char とも unsigned char とも異なる型です。 既定では、/J コンパイラ オプションを使用しない限り、char 型の変数は signed char 型からであるかのように int に上位変換されます。 /J のもとでは、それらは unsigned char 型として扱われ、符号拡張なしで int に上位変換されます。

C++ の組み込み型でない byte を表すために、しばしば unsigned char 型が使用されます。

wchar_t 型は、実装定義のワイド文字型です。 Microsoft コンパイラでは、Windows オペレーティング システムのネイティブ文字型である UTF-16LE としてエンコードされた Unicode を格納するために使用される 16 ビット ワイド文字を表します。 ユニバーサル C ランタイム (UCRT) ライブラリ関数のワイド文字バージョンは wchar_t を使用し、そのポインター型と配列型をパラメーターとして使用して、ネイティブ Windows API のワイド文字バージョンと同様に値を返します。

char8_tchar16_tchar32_t の各型はそれぞれ、8 ビット、16 ビット、32 ビットのワイド文字を表します。 (char8_tC++20 の新機能であり、または/std:c++latestコンパイラ オプションが/std:c++20必要です)。)UTF-8 としてエンコードされた Unicode は、型にchar8_t格納できます。 char8_t 型と char 型の文字列は、Unicode またはマルチバイト文字のエンコードに使用される場合でも、ナロー 文字列と呼ばれます。 UTF-16 としてエンコードされた Unicode は char16_t 型で格納でき、UTF-32 としてエンコードされた Unicode は char32_t 型で格納できます。 これらの型と wchar_t の文字列はすべてワイド 文字列と呼ばれますが、この用語はしばしば、特に wchar_t 型の文字列を指します。

C++ 標準ライブラリでは、basic_string 型はナロー文字列とワイド文字列の両方に向けて特殊化されています。 文字が char 型の場合は std::string、文字が char8_t 型の場合は std::u8string、文字が char16_t 型の場合は std::u16string、文字が char32_t 型の場合は std::u32string、文字が wchar_t 型の場合は std::wstring を使用します。 std::stringstreamstd::cout など、テキストを表すその他の型は、ナロー文字列とワイド文字列向けに特殊化されています。