UTF-8 の実行文字セットを持つ C++11 コンパイラを考えてみましょう (また、char
型が符号付き 8 ビット バイトであることを要求する x86-64 ABI に準拠しています)。
文字 Ä (ウムラウト) の Unicode コード ポイントは0xC4
で、2 コード単位の UTF-8 表現は{0xC3, 0x84}
コンパイラは、文字リテラルに の値を持つ'\xC4'
の型を割り当てます。int
0xC4
コンパイラは標準に準拠しており、ABI に準拠していますか? あなたの推論は何ですか?
C++11 標準からの関連する引用:
2.14.3.1
単一の c-char を含む通常の文字リテラルの型は char で、値は実行文字セットでの c-char のエンコーディングの数値に等しくなります。複数の c-char を含む通常の文字リテラルは、複数文字リテラルです。複数文字リテラルには、型 int と実装定義の値があります。
2.14.3.4
エスケープ \xhhh は、円記号の後に x が続き、その後に目的の文字の値を指定するために使用される 1 つ以上の 16 進数が続きます。文字リテラルの値が、char に対して定義された実装定義の範囲外にある場合、その値は実装定義です。