Maison  >  Article  >  développement back-end  >  Pourquoi char est-il considéré comme un type distinct du caractère signé et du caractère non signé dans les modèles C ?

Pourquoi char est-il considéré comme un type distinct du caractère signé et du caractère non signé dans les modèles C ?

DDD
DDDoriginal
2024-10-29 06:04:31906parcourir

Why is char considered a distinct type from signed char and unsigned char in C   Templates?

char!=(signed char), char!=(unsigned char)

Cette question explore le comportement du type de données char dans C par rapport à d’autres types entiers comme int. Plus précisément, il répond à l'observation selon laquelle char est traité comme un type distinct à la fois du caractère signé et du caractère non signé.

La norme C définit le caractère char, le caractère signé et le caractère non signé comme trois types distincts. Bien qu'ils partagent la même quantité d'exigences de stockage et d'alignement, leurs représentations de valeurs et leurs modèles de bits sont distincts. Pour les types de caractères non signés, tous les modèles de bits représentent des nombres. Cependant, cela n'est pas nécessairement vrai pour les chars ou les chars signés.

L'exemple de code dans la question démontre cette différence de comportement. Lorsque des spécialisations de modèles sont créées pour int8 (char signé), uint8 (char non signé) et char, trois instanciations distinctes sont générées. En effet, le compilateur traite char comme un type distinct des deux autres.

En revanche, lorsque des spécialisations de modèles sont créées pour int, int32 et uint32, une seule instanciation est générée pour int et int32 car ils sont considéré comme du même type. Signed int, cependant, est traité comme un type distinct et génère sa propre spécialisation de modèle.

Ce comportement est cohérent avec la norme C, qui stipule que char, approved char et unsigned char sont trois types différents. Par conséquent, il est correct de les traiter comme des types distincts dans les spécialisations de modèles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn