12

これは、およびに関連しchar32_tていますintXX_t。仕様は次のことを指摘しています。

2.14.3.2

単一のc-charを含むchar16_tリテラルの値は、コードポイントが単一の16ビットコードユニットで表現可能である場合、そのISO10646コードポイント値と等しくなります。

5.3.3.1

[..]特に[..]sizeof(char16_t)、sizeof(char32_t)、およびsizeof(wchar_t)は実装定義です

intXX_t「オプション」()というコメントを除けば、タイプについては何もわかりません18.4.1

achar16_tが2バイトであることが保証されていない場合、16ビットであることが保証されていますか(1バイト!= 8ビットのアーキテクチャでも)?

4

3 に答える 3

11

3.9.1基本タイプ[basic.fundamental]

タイプchar16_tおよびchar32_tは、それぞれuint_least16_tおよびuint_least32_tと同じサイズ、符号、および配置を持つ別個のタイプを示し、基になるタイプと呼ばれます。

これは、char16_tが少なくとも16ビットであることを意味します(ただし、それよりも大きい場合があります)

しかし、私も信じています:

単一のc-charを含むchar16_tリテラルの値は、コードポイントが単一の16ビットコードユニットで表現可能である場合、そのISO10646コードポイント値と等しくなります。

同じ保証を提供します(ただし、明示的ではありません(ISO 10646がUCSであることを知っておく必要があるため(UCSは互換性がありますが、Unicodeとまったく同じではないことに注意してください))。

于 2011-06-22T13:50:42.283 に答える
5

単一のc-charを含むリテラルの値はchar16_t、コードポイントが単一の16ビットコードユニットで表現可能である場合、そのISO10646コードポイント値と等しくなります。

char16_tが少なくとも16ビット幅でなければ、これを満たすことは不可能です。したがって、矛盾することにより、少なくともその幅であることが保証されます。

于 2011-06-22T13:48:40.063 に答える
2

小さいタイプをサポートしないプラットフォームがあるため、正確に16ビットであるとは保証できません(たとえば、DSPは、ワードサイズ(24、32、または64ビット)よりも小さいものをアドレス指定できないことがよくあります。 )。最初の引用符は、少なくとも16ビットになることを保証します。

于 2011-06-22T13:54:26.567 に答える