char!=(signed char), char!=(unsigned char) [duplicate]
特定のシナリオでは、C は char を扱います。 int やそのバリアントとは異なり、signed char と unsigned char を別個の型として扱います。この動作は、C 標準で概説されている C の文字型の性質に由来します。
Plain char, signed char, and unsigned char are three distinct types.
通常、 int は signed int と同義ですが、 char は signed char または unsigned char と同じ関係を持ちません。 。これは、これらの型のテンプレート特殊化が個別にインスタンス化されることを意味します。
提供されたコードでは、次の 3 つのテンプレート特殊化が作成されます:
ただし、int の場合およびそのバリアントでは、符号付きまたは符号なしとして明示的に指定されない限り、これらはすべて同じ型とみなされ、テンプレート特殊化が 1 つだけ作成されます。
したがって、指定された例では、出力には 3 つの異なる値が表示されます。 isX::ikIsX では、int8、uint8、char の型エイリアスが表示されますが、int32、uint32、および int の値は 1 つだけ表示されます。
この区別は、テンプレートのメタプログラミングと型のイントロスペクションを使用するときに理解することが重要です。 C .
以上がC テンプレートの特殊化において、`char`、`signed char`、および `unsigned char` が `int` およびそのバリアントとは異なる動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。