static_cast cast c++ const casting

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 .