Desde el borrador de trabajo C++ 0x, los nuevos tipos char (char16_t y char32_t) para el manejo de Unicode será sin signo (uint_least16_t y uint_least32_t se ser los tipos subyacentes).de signo de carbón y Unicode en C++ 0x
Pero por lo que puedo ver (no muy lejos tal vez) un tipo char8_t (basado en uint_least8_t) no está definido. Por qué ?
Y es aún más confuso cuando ves que un nuevo U8 codificación de prefijo se introdujo para UTF-8 cadena literal ... basado en viejo amigo (signo/sin signo) carbón. Por qué ?
actualización: Hay una propuesta de añadir un nuevo tipo: char8_t
char8_t: Un tipo de caracteres UTF-8 y cadenas http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0482r0.html
Si quiero almacenar el carácter é (U + 00E9), esa es la secuencia de dos bytes 0xC3 0xA9, con una matriz de caracteres firmados fallará: signed char e_acute = {0xC3,0xA9} => esto truncará el valor. Entonces, si su sistema define char como char firmado, sigue siendo un problema. Me equivoco ? – anno
Muy raramente necesita ingresar los bytes manualmente: a menudo, como usted dice, se usa el 'u8'. Entonces, los bytes altos solo se tratan como números negativos en ese caso. –
Chris, ¿hay alguna garantía de que el par de conversiones 'unsigned char-> signed char-> unsigned char' arrojará el valor original? La primera conversión está definida por la implementación y no pude encontrar ninguna cláusula que garantizara el viaje de ida y vuelta. – avakar