C の文字型: 別個のものか同等ですか?
C では、文字型 (char) の動作が、C の文字型 (char) の動作と異なる場合があります。符号付き整数と符号なし整数が区別されるため、混乱が生じます。具体的には、次のコードはこの違いを示しています。
<code class="cpp">#include <iostream> typedef signed char int8; typedef unsigned char uint8; struct TrueType {}; struct FalseType {}; template <typename T> struct isX { typedef typename T::ikIsX ikIsX; }; template <> struct isX<char > { typedef FalseType ikIsX; }; template <> struct isX<int8 > { typedef FalseType ikIsX; }; template <> struct isX<uint8 > { typedef FalseType ikIsX; }; template <typename T> bool getIsTrue(); template <> bool getIsTrue<TrueType>() { return true; } template <> bool getIsTrue<FalseType>() { return false; } int main(int, char **t ) { cout << getIsTrue< isX<char>::ikIsX >() << endl; cout << getIsTrue< isX<int8>::ikIsX >() << endl; cout << getIsTrue< isX<uint8>::ikIsX >() << endl; }</code>
このコードはコンパイルされますが、char に対して int8 および uint8 とは異なる結果が生成されます。これは、C が char、signed char、unsigned char を 3 つの異なる型として扱うためです。
対照的に、int と uint32 は同等の型です。
<code class="cpp">template <> struct isX<int > { typedef FalseType ikIsX; }; template <> struct isX<unit32> { typedef FalseType ikIsX; };</code>
この区別は、次の事実から生じています。 char は歴史的に、文字の表現と数値の保存の両方に使用されてきました。その結果、C はプレーン char を int とは異なる別の型として扱うことによって下位互換性を維持します。
char が 2 つの表現のどちらを使用するかを決定するには、実装定義の typedef char_traits
以上がC では、「char」、「signed char」、および「unsigned char」は本当に区別されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。