char!=(signed char), char!=(unsigned char)
この質問では、char データ型の動作について調べます。 C を int などの他の整数型と比較した場合。具体的には、char が signed char と unsigned char の両方とは異なる型として扱われるという観察に対処します。
C 標準では、char、signed char、unsigned char を 3 つの別個の型として定義します。これらは同じ量のストレージとアライメント要件を共有しますが、値の表現とビット パターンは異なります。符号なし文字タイプの場合、すべてのビット パターンは数値を表します。ただし、これは char または signed char に必ずしも当てはまるわけではありません。
質問内のコード例は、この動作の違いを示しています。 int8 (signed char)、uint8 (unsigned char)、および char に対してテンプレートの特殊化が作成されると、3 つの個別のインスタンスが生成されます。これは、コンパイラが char を他の 2 つとは別の型として扱うためです。
対照的に、int、int32、および uint32 に対してテンプレートの特殊化が作成される場合、int と int32 のインスタンス化は 1 つだけ生成されます。同じタイプとみなされます。ただし、signed int は別の型として扱われ、独自のテンプレート特殊化が生成されます。
この動作は、char、signed char、unsigned char が 3 つの異なる型であると規定されている C 標準と一致しています。したがって、テンプレートの特殊化ではこれらを個別のタイプとして扱うのが正しいです。
以上がC テンプレートでは、char が signed char および unsigned char とは別の型とみなされているのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。