ホームページ >バックエンド開発 >C++ >C テンプレートの特殊化において、`char`、`signed char`、および `unsigned char` が `int` およびそのバリアントとは異なる動作をするのはなぜですか?

C テンプレートの特殊化において、`char`、`signed char`、および `unsigned char` が `int` およびそのバリアントとは異なる動作をするのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 19:01:30394ブラウズ

Why do `char`, `signed char`, and `unsigned char` behave differently from `int` and its variants in C   template specializations?

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 つのテンプレート特殊化が作成されます:

  • isX::ikIsX (signed char 用) )
  • isX::ikIsX (unsigned char の場合)
  • isX::ikIsX (plain char の場合)

ただし、int の場合およびそのバリアントでは、符号付きまたは符号なしとして明示的に指定されない限り、これらはすべて同じ型とみなされ、テンプレート特殊化が 1 つだけ作成されます。

したがって、指定された例では、出力には 3 つの異なる値が表示されます。 isX::ikIsX では、int8、uint8、char の型エイリアスが表示されますが、int32、uint32、および int の値は 1 つだけ表示されます。

この区別は、テンプレートのメタプログラミングと型のイントロスペクションを使用するときに理解することが重要です。 C .

以上がC テンプレートの特殊化において、`char`、`signed char`、および `unsigned char` が `int` およびそのバリアントとは異なる動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。