「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 以下は、提供された記事の内容に基づいて生成された英語の質問と回答のタイトルです。 テンプレートのインスタンス化において、「char」、「signed char」、および「unsigned char」を比較するときに、「char」の動作が整数型とは異なるのはなぜですか?

以下は、提供された記事の内容に基づいて生成された英語の質問と回答のタイトルです。 テンプレートのインスタンス化において、「char」、「signed char」、および「unsigned char」を比較するときに、「char」の動作が整数型とは異なるのはなぜですか?

2024 年 11 月 3 日に公開
ブラウズ:489

以下是根据您提供的文章内容生成的英文问答类标题:

Why does `char` behave differently from integer types in template instantiation when comparing `char`, `signed char`, and `unsigned char`?

char、signed char、unsigned char の動作の違い

以下のコードは正常にコンパイルされますが、char は整数型とは動作が異なります。

cout ::ikIsX  >() ::ikIsX  >() ::ikIsX  >() 

結果は、int8、uint8、char の 3 つの型に対する 3 つのインスタンス化パターンになります。なぜこれが起こるのでしょうか?

同じことは整数にも当てはまりません。 int と uint32 では 1 つのパターンのインスタンス化が行われ、signed int では別のパターンのインスタンス化が行われます。

その理由は、おそらく C が char を扱うためです。 signed char と unsigned char の 3 つの異なるタイプ。一方、int は signed int と同じです。これは本当ですか?それとも何かが足りないのでしょうか?

#include 

using namespace std;

typedef   signed char       int8;
typedef unsigned char      uint8;
typedef   signed short      int16;
typedef unsigned short     uint16;
typedef   signed int        int32;
typedef unsigned int       uint32;
typedef   signed long long  int64;
typedef unsigned long long uint64;

struct TrueType {};
struct FalseType {};

template 
struct isX
{
   typedef typename T::ikIsX ikIsX;
};


// Это  int==int32 неоднозначно
//template  bool getIsTrue();
template ::ikIsX  >() ::ikIsX  >() ::ikIsX  >() ::ikIsX  >() ::ikIsX  >() ::ikIsX  >() 

私は g 4.something を使用します

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3