"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Son `char`, `signed char` y `unsigned char` realmente distintos en C++?

¿Son `char`, `signed char` y `unsigned char` realmente distintos en C++?

Publicado el 2024-11-05
Navegar:513

  Are `char`, `signed char`, and `unsigned char` Truly Distinct in C  ?

Tipos de caracteres en C: ¿distintos o equivalentes?

En C, el comportamiento de los tipos de caracteres (char) a veces puede diferir del de enteros con y sin signo, lo que genera confusión. Específicamente, el siguiente código demuestra esta diferencia:

#include 

typedef   signed char       int8;
typedef unsigned char      uint8;

struct TrueType {};
struct FalseType {};

template 
struct isX
{
   typedef typename T::ikIsX ikIsX;
};

template             struct isX  { typedef FalseType ikIsX; };
template             struct isX  { typedef FalseType ikIsX; };
template             struct isX  { typedef FalseType ikIsX; };

template  bool getIsTrue();
template            bool getIsTrue() { return true; }
template            bool getIsTrue() { return false; }

int main(int, char **t )
{
   cout ::ikIsX  >() ::ikIsX  >() ::ikIsX  >() 

Este código se compila pero produce resultados diferentes para char que para int8 y uint8. Esto se debe a que C trata a char, char firmado y char sin firmar como tres tipos distintos.

Por el contrario, int y uint32 son tipos equivalentes:

template             struct isX  { typedef FalseType ikIsX; };
template             struct isX  { typedef FalseType ikIsX; };

Esta distinción surge del hecho de que char se ha utilizado históricamente tanto para representar caracteres como para almacenar valores numéricos. Como resultado, C mantiene la compatibilidad con versiones anteriores al tratar char simple como un tipo separado, distinto de int.

Para determinar cuál de las dos representaciones utiliza char, el typedef definido por la implementación char_traits::signed es proporcionó. Si esto es cierto, char se comporta como un tipo con signo; de lo contrario, se comporta como un tipo sin firmar.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3