4

__STDC_ISO_10646__のC++標準のコピーから、マクロを理解するのに苦労しています:

__STDC_ISO_10646__

yyyymmL の形式の整数定数 (たとえば、199712L)。このシンボルが定義されている場合、Unicode 必須セットのすべての文字は、wchar_t 型のオブジェクトに格納されると、その文字の短い識別子と同じ値になります。Unicode 必須セットは、ISO/IEC 10646 で定義されているすべての文字と、指定された年と月のすべての修正および技術的な正誤表で構成されています。

私の理解では、これはwchar_tシステム上で Unicode コード ポイントを表すことを意味します。これは正しいです?この場合、utf-8 および utf-16 エンコーディングは準拠しておらず、utf-32 は準拠していますよね? また、他に準拠している文字エンコーディングは何ですか?

4

2 に答える 2

4

引用する標準のセクション (§16.8 定義済みマクロ名 [cpp.predefined]) では、一連の定義の前に次のものが付けられます。

¶2 次のマクロ名は、実装によって条件付きで定義されます。

つまり、実装が要件を満たすことができない場合 (たとえば、wchar_tが 16 ビット型であるため)、実装は を定義しません__STDC_ISO_10646__

一方、wchar_tが 32 ビット以上の型である場合、実装でマクロを定義できる可能性があります。ISO 10646 では、すべての文字を表すのに 21 ビットしか必要としませんが、(ほぼ) すべての実用的な目的では、16 ビットwchar_tでは小さすぎ、32 ビットwchar_tでは十分に大きいことを意味します。また、ゼロからの実装ではwchar_t32 ビット型になる可能性が高いことも意味します。wchar_t既存の実装は、このオプションが標準化される前に16 ビットを選択した場合、下位互換性によって妨げられる可能性があります。

于 2012-09-25T20:21:26.583 に答える
1

マクロは、これが wchar_t に格納されているときの Unicode 文字の値に関連しています。

より具体的には、ISO/IEC 10646 標準は、標準に修正が加えられるにつれて、より多くの文字をサポートします。

マクロの値として定義できる年と月は、Unicode 文字を wchar_t 変数に格納すると、その変数に格納される Unicode 文字の値が、指定された年と月。

[http://www.unicode.org/charts/][1]Unicode 短縮識別子のリファレンスについては、こちらを参照してください

お役に立てれば

レフテリス

于 2012-09-25T20:35:38.253 に答える