C の文字型: 個別または同等?
C では、文字型 (char) の動作が C の動作と異なる場合があります。符号付き整数と符号なし整数が区別されるため、混乱が生じます。具体的には、次のコードはこの違いを示しています:
#include
typedef signed char int8;
typedef unsigned char uint8;
struct TrueType {};
struct FalseType {};
template
struct isX
{
typedef typename T::ikIsX ikIsX;
};
template struct isX { typedef FalseType ikIsX; };
template struct isX { typedef FalseType ikIsX; };
template struct isX { typedef FalseType ikIsX; };
template bool getIsTrue();
template bool getIsTrue() { return true; }
template bool getIsTrue() { return false; }
int main(int, char **t )
{
cout ::ikIsX >() ::ikIsX >() ::ikIsX >() このコードはコンパイルされますが、char の場合は int8 および uint8 の場合とは異なる結果が生成されます。これは、C が char、signed char、unsigned char を 3 つの異なる型として扱うためです。
対照的に、int と uint32 は同等の型です。
template struct isX { typedef FalseType ikIsX; };
template struct isX { typedef FalseType ikIsX; };
この区別は、char が歴史的に文字の表現と数値の格納の両方に使用されてきたという事実に由来しています。その結果、C はプレーン char を int とは異なる別の型として扱うことによって下位互換性を維持します。
char が 2 つの表現のどちらを使用するかを決定するには、実装定義の typedef char_traits::signed が使用されます。提供された。これが true の場合、char は signed 型として動作します。それ以外の場合は、符号なし型として動作します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3