Skip to content

Latest commit

 

History

History
39 lines (27 loc) · 2.18 KB

utf8_character_literals.md

File metadata and controls

39 lines (27 loc) · 2.18 KB

UTF-8文字リテラル [N4267]

  • cpp17[meta cpp]

このページは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制御文字とラテン基本文字)となる
    • そのコードポイント範囲を超える値が指定された場合、プログラムは不適格となる

参照