20

たとえば、次のようになります。

wchar_t x;

次のように翻訳します。

unsigned short x;
4

6 に答える 6

22

要するに:CではC++ではないかもしれません。

広く。Cはwchar_tをtypedefとして定義しますが、Unixでは通常4バイト(通常は短くない)であり、Windows2では短い場合があります。

charC ++では、またはのような固有の組み込み型intであるため、合法的にオーバーロードvoid foo(short x)してvoid foo(wchar_t x)

于 2010-03-07T07:34:03.880 に答える
17

Visual Studioプロジェクトの関数呼び出しがリンクされないためにこの答えに出くわす可能性のある他の人にとっては、両方の当事者がwchar_t(またはUNICODE #definedなどの同等のタイプをLPCTSTR)取得し、ライブラリのエクスポートをDUMPBINすると、関数は、VSでは組み込みタイプとしてconst unsigned short *オフに切り替えることができることに注意してください。wchar_t誰かがライブラリでこれを変更し、プロジェクトで同じコンパイラスイッチを押さないと、リンクされません。

このオプションは、[プロジェクトのプロパティ]> [C / C ++ / Language / WChar_tを組み込みタイプとして扱う]で変更できます。また、[/Zc]オプションで変更することもできます。

于 2010-09-08T01:27:13.407 に答える
12

Cの場合、wchar_ttypedefです。の同義語でunsigned intあるか、符号なし型であるか、または4バイトであるかどうかは、実装によって定義されます。

C ++では、wchar_tは別個の組み込み型です。ここでも、そのサイズと署名は実装によって定義されます。

于 2010-03-07T08:39:07.290 に答える
1

wchar_tは、標準では署名されていない必要はありません。署名することもできます。また、同じサイズの別のタイプが必要です。しかし、規格では、他のタイプは短くなければならないと明示的には述べていません。

「基になる型と呼ばれる、他の整数型の1つと同じサイズ、符号、および配置要件」(C ++98§3.9.1)。

Cコンパイラでは、これはtypedefであり、通常はstddef.hで定義されます。

于 2010-03-07T07:39:20.917 に答える
1

いいえ、そうではありません。これは「ワイド文字」に変換されます。特定のプラットフォームで何が起こっているかについての仮定を立てることは正しくなく、そもそもwchar_tを持つという目的全体を無効にします。

抽象化を使用するポイントは、型の意味的意味をその基礎となる表現から分離することです。

于 2010-03-07T07:59:44.267 に答える
0

必ずしも; それは4バイトの量、または実際に実装によって選択された他のサイズである可能性があります。

コンパイラによって異なります。

于 2010-03-07T07:32:14.810 に答える