C プログラミングでは、char、signed char、unsigned char は別個のデータ型とみなされます。 。この動作は、int と signed int が同じ型であり、unsigned int が別の別の型である整数とは異なります。
質問:
なぜ以下のコードは、char 型と int 型ではコンパイル方法が異なりますか?
cout << getIsTrue< isX<int8>::ikIsX >() << endl; cout << getIsTrue< isX<uint8>::ikIsX >() << endl; cout << getIsTrue< isX<char>::ikIsX >() << endl;
答え:
C は、char、signed char、unsigned char を 3 つの異なる型として区別します。これが、char、int8、および uint8 のテンプレートのインスタンス化が異なる理由です。
ただし、整数の場合、int と signed int は同じ型ですが、unsigned int は異なる型です。これが、int、int32、および uint32 のテンプレートのインスタンス化で一意のテンプレートが 2 つだけになる理由です。
標準の [basic.fundamental](https://eel.is/cdraft/basic.fundamental) には次のように記載されています。 :
「Plain char、signed char、unsigned char は 3 つの異なる型です。」
これは、実装に応じて、異なるオブジェクト表現があり、異なる値の範囲を持つことができることを意味します。
以上がC では、「char」、「signed char」、「unsigned char」が「int」、「signed int」、「unsigned int」とは異なる扱いを受けるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。