符号なしshortだけのtypedefをwchar_tをされていますか?
質問
たとえば、します:
wchar_t x;
に変換
unsigned short x;
解決
:CにおいてCであってもよい++なし
広く。 C定義のwchar_tのtypedefとしてそれは短くてもよいので、UNIXでは、一般的に4バイト(それほど一般にショートしない)およびWindows 2である。
の下でCあなたが合法的にchar
とint
void foo(short x)
またはvoid foo(wchar_t x)
などのビルトインタイプのユニークです 他のヒント
wchar_t
取って、両当事者にもかかわらずではないリンク、(UNICODEこのようなLPCTSTR
として、あるいは同等のタイプは、#defineで定義)されますので、この答えに遭遇する可能性があり、誰のために、そしてときにDUMPBIN図書館の輸出機能const unsigned short *
をとり、VSは、ビルトインタイプとしてあなたがwchar_t
をオフに切り替えることができますことに注意してください。誰かが図書館でこれを変更し、あなたのプロジェクトで同じコンパイラスイッチをヒットしない、それはリンクしません。
このオプションは、「プロジェクトのプロパティ]> [C / C ++ /言語/組み込み型として扱うwchar_t型」の下に変更することができ、それはまた、「/ Zcの」オプションで変更することができます。
Cの場合、wchar_t
はtypedef
あります。それはunsigned int
の同義語であるか否か、それが全てでunsigned型であるかどうか、またはそれが4バイトであるか否かを、実装定義です。
はC ++で、wchar_t
内蔵型区別されます。ここでは、あまりにも、その大きさと符号の有無は実装定義です。
wchar_t型は符号なしであることを規格で要求されていません。また、署名することができます。そして、同じサイズの別のタイプが存在しなければなりません。しかし、標準は、明示的に、他のタイプは短くなければならないと言うことはありません。
「その下型と呼ばれる他の整数型のものと同じサイズ、符号の有無と位置合わせ要件」(C ++ 98§3.9.1)。
でCはコンパイラは、これは通常STDDEF.H
で定義のtypedef、ありますいいえ、それはしていません。それはに変換「ワイド文字」。それはがあることを起こるかについて何らかの仮定を作るの特定のプラットフォームが間違っている、と敗北にの全体の目的の最初の場所でのwchar_tを持っています。
の抽象化を使用してのポイントは、その基礎となる表現からタイプの意味論的な意味を分離することである。
必ずしもそうではありません。それは実装によって選択された4バイトの量、または実際に任意の他のサイズであってもよい。
これは、コンパイラに依存します。