このページはC++17に採用された言語機能の変更を解説しています。
のちのC++規格でさらに変更される場合があるため関連項目を参照してください。
概要
C++14までは、UTF-8エンコーディングであることを示すu8
プレフィックスを、文字列リテラルに対してのみ指定できた。C++17では、文字リテラルに対してもu8
プレフィックスを付けられる。
char s[] = u8"あいうえお"; // OK : C++11以降
char c = u8'A'; // OK : C++17以降
C++20ではUTF-8文字リテラルの型がchar
ではなくchar8_t
になる
仕様
u8
プレフィックスが付いた文字リテラルは、char
文字型の、UTF-8文字リテラルとなる- UTF-8文字リテラルの値は、ISO 10646のコードポイント値と同値となる。そのコードポイント値は、単一のUTF-8コードユニットで表現できること
- UTF-8文字リテラルが扱えるコードポイントの範囲は、C0 Controls and Basic Latin Unicode block (C0制御文字とラテン基本文字)となる
- そのコードポイント範囲を超える値が指定された場合、プログラムは不適格となる
関連項目
- C++11 UTF-8文字列リテラル
- C++11
char16_t
とchar32_t
- C++20 UTF-8エンコーディングされた文字の型として
char8_t
を追加 - ostream
operator<<