char、signed char、unsigned char の動作の違い
以下のコードは正常にコンパイルされますが、char は整数型とは動作が異なります。
cout << getIsTrue< isX<int8>::ikIsX >() << endl; cout << getIsTrue< isX<uint8>::ikIsX >() << endl; cout << getIsTrue< isX<char>::ikIsX >() << endl;
結果は、int8、uint8、char の 3 つの型に対する 3 つのインスタンス化パターンになります。なぜこのようなことが起こるのでしょうか?
同じことは整数にも当てはまりません。int と uint32 では 1 つのパターンのインスタンス化が行われ、signed int では別のパターンのインスタンス化が行われます。
その理由は、おそらく C が char を扱うためです。 signed char と unsigned char の 3 つの異なるタイプ。一方、int は signed int と同じです。これは本当ですか?それとも何かが足りないのでしょうか?
<code class="cpp">#include <iostream> 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 <typename T> struct isX { typedef typename T::ikIsX ikIsX; }; // Это int==int32 неоднозначно //template <> struct isX<int > { typedef FalseType ikIsX; }; // Ошибка template <> struct isX<int32 > { typedef FalseType ikIsX; }; template <> struct isX<uint32 > { typedef FalseType ikIsX; }; // Почему это не двусмысленно? char==int8 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 << sizeof(int8) << endl; // 1 cout << sizeof(uint8) << endl; // 1 cout << sizeof(char) << endl; // 1 cout << getIsTrue< isX<int8>::ikIsX >() << endl; cout << getIsTrue< isX<uint8>::ikIsX >() << endl; cout << getIsTrue< isX<char>::ikIsX >() << endl; cout << getIsTrue< isX<int32>::ikIsX >() << endl; cout << getIsTrue< isX<uint32>::ikIsX >() << endl; cout << getIsTrue< isX<int>::ikIsX >() << endl; }
私は g 4.something を使用しています
以上が以下は、提供された記事の内容に基づいて生成された英語の質問と回答のタイトルです。 テンプレートのインスタンス化において、「char」、「signed char」、および「unsigned char」を比較するときに、「char」の動作が整数型とは異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。