4

C ++ 11 2.3 / 2によると:

ユニバーサル文字名\UNNNNNNNNで指定されている文字は、ISO /IEC10646での文字の短縮名がNNNNNNNNである文字です。

そこで、 ISO / IEC 10646をダウンロードしましたが、「文字の短い名前」の定義が見つかりませんでした。誰かがこれが何を指しているのかを明確にしていただけますか?

私の当初の目標は、\ Uでコードポイントを指定するときに8桁の16進数が必要な理由を見つけることでした。ただし、6桁で常に十分です。したがって、C++11で\UNNNNNNの代わりに\UNNNNNNNNを使用するように指定されている理由も知りたいと思います。

4

2 に答える 2

6

Unicode 文字コード表では、各文字にフル ネームとショート ネームがあります。たとえば、キャラクター/にはフルネームSOLIDUSとショートネームがあり002Fます。偶然ではありませんが、すべての文字の短い名前は 16 進数で表現できます。

8桁を指定する必要がある理由については、より大きな/より多くの文字ブロックを使用する可能性のある将来のバージョンのUnicode標準との前方互換性のためだと思います。

于 2012-09-24T22:45:01.827 に答える
1

前回は Unicode の人たちに噛まれたのではないかと思います。C++ は当初、wchar_tすべての Unicode 文字を保持できるように作られていました。Unicode は最大 16 ビットを使用することを意図していたため、このためには少なくとも 16 ビットを保持する必要がありました。一般的な実装が実際に 16 ビット型を使用することを決定した直後に、wchar_t実際には 16 ビットでは不十分であることが判明しました。前回、Unicode は 20 ビットを使用していましたが、なぜまた短すぎることに賭ける必要があるのでしょうか。24 ビット型が広く使用される可能性は低く、特定のコード ポイントを使用する必要がある場合は、16 ビットのみを使用するのとほとんど同じです。つまり、\uNNNN.

2.3 [lex.charset] パラグラフ 2 の説明は、universal-character-names がコード ポイントを参照していることを示しているようです。同時に、universal-character-name は文字の短い名前を参照するために使用されます。私は Unicode の専門家ではありませんが、コード ポイントが意図されていると思います。

于 2012-09-24T22:42:45.683 に答える