たとえば、次のようになります。
wchar_t x;
次のように翻訳します。
unsigned short x;
要するに:CではC++ではないかもしれません。
広く。Cはwchar_tをtypedefとして定義しますが、Unixでは通常4バイト(通常は短くない)であり、Windows2では短い場合があります。
char
C ++では、またはのような固有の組み込み型int
であるため、合法的にオーバーロードvoid foo(short x)
してvoid foo(wchar_t x)
Visual Studioプロジェクトの関数呼び出しがリンクされないためにこの答えに出くわす可能性のある他の人にとっては、両方の当事者がwchar_t
(またはUNICODE #definedなどの同等のタイプをLPCTSTR
)取得し、ライブラリのエクスポートをDUMPBINすると、関数は、VSでは組み込みタイプとしてconst unsigned short *
オフに切り替えることができることに注意してください。wchar_t
誰かがライブラリでこれを変更し、プロジェクトで同じコンパイラスイッチを押さないと、リンクされません。
このオプションは、[プロジェクトのプロパティ]> [C / C ++ / Language / WChar_tを組み込みタイプとして扱う]で変更できます。また、[/Zc]オプションで変更することもできます。
Cの場合、wchar_t
はtypedef
です。の同義語でunsigned int
あるか、符号なし型であるか、または4バイトであるかどうかは、実装によって定義されます。
C ++では、wchar_t
は別個の組み込み型です。ここでも、そのサイズと署名は実装によって定義されます。
wchar_tは、標準では署名されていない必要はありません。署名することもできます。また、同じサイズの別のタイプが必要です。しかし、規格では、他のタイプは短くなければならないと明示的には述べていません。
「基になる型と呼ばれる、他の整数型の1つと同じサイズ、符号、および配置要件」(C ++98§3.9.1)。
Cコンパイラでは、これはtypedefであり、通常はstddef.hで定義されます。
いいえ、そうではありません。これは「ワイド文字」に変換されます。特定のプラットフォームで何が起こっているかについての仮定を立てることは正しくなく、そもそもwchar_tを持つという目的全体を無効にします。
抽象化を使用するポイントは、型の意味的意味をその基礎となる表現から分離することです。
必ずしも; それは4バイトの量、または実際に実装によって選択された他のサイズである可能性があります。
コンパイラによって異なります。