cast - Lanzamiento de estilo C++ desde unsigned char*hasta const char*
static cast (6)
Yo tengo:
unsigned char *foo();
std::string str;
str.append(static_cast<const char*>(foo()));
El error: invalid static_cast from type ''unsigned char*'' to type ''const char*''
¿Cuál es la forma correcta de elegir el estilo C ++?
Espero que ayude :)
const unsigned attribName = getname();
const unsigned attribVal = getvalue();
const char *attrName=NULL, *attrVal=NULL;
attrName = (const char*) attribName;
attrVal = (const char*) attribVal;
Debería usar un reinterpret_cast<>
ya que los dos tipos que está intercambiando no están relacionados entre sí.
Prueba reinterpret_cast
unsigned char *foo();
std::string str;
str.append(reinterpret_cast<const char*>(foo()));
reinterpretar_cast
unsigned char * es básicamente una matriz de bytes y se debe usar para representar datos en bruto en lugar de una cadena en general. Una cadena Unicode se representaría como wchar_t *
De acuerdo con el estándar C ++, una reinterpretación_cast entre unsigned char * y char * es segura ya que son del mismo tamaño y tienen la misma construcción y restricciones. Intento evitar reintrepret_cast incluso más que const_cast en general.
Si el reparto estático falla con lo que está haciendo, es posible que desee reconsiderar su diseño porque, francamente, si está utilizando C ++, puede aprovechar lo que ofrece la parte "plus plus" y usar las clases de cadena y STL (también conocido como std :: basic_string podría funcionar mejor para ti)
char *
y const unsigned char *
se consideran tipos no relacionados. Entonces quieres usar reinterpret_cast
.
Pero si fuera de const unsigned char*
a un tipo no const
primero necesitaría usar const_cast
. reinterpret_cast
no puede rechazar una const
o calificación volatile
.