Estoy trabajando en C++ con dos grandes piezas de código, una hecha en "estilo C" y otra en "estilo C++".C++ std :: string y NULL const char *
El código de tipo C tiene funciones que devuelven el código C++ const char * y ha en lugares numerosas cosas como
const char* somecstylefunction();
...
std::string imacppstring = somecstylefunction();
donde se está construyendo la cadena de un const char * devuelto por el código de estilo C .
Esto funcionó hasta que cambió el código de estilo C y comenzó a devolver punteros NULL a veces. Esto, por supuesto, provoca fallas seg.
Hay un montón de código alrededor y por lo tanto me gustaría la forma más parsimoniosa de solucionar este problema. El comportamiento esperado es que imacppstring sería la cadena vacía en este caso. ¿Hay una buena y elegante solución para esto?
actualización
La const char * devuelto por estas funciones son siempre punteros a cadenas estáticas. Se usaron principalmente para pasar mensajes informativos (destinados a la registración más probable) sobre cualquier comportamiento inesperado en la función. Se decidió que el tener estos NULL retorno de la "nada que informar" estaba muy bien, porque entonces se podría utilizar el valor de retorno como un condicional, es decir
if (somecstylefunction()) do_something;
mientras que antes las funciones devuelven la cadena estática "";
Si esto fue una buena idea, no voy a tocar este código y no depende de mí de todos modos.
Lo que quería evitar era rastrear cada inicialización de cadena para agregar una función de envoltura.
Me gustaría mencionar que usted es "mantenedor", como lo mencionó en un comentario, podría estar rompiendo algunas reglas de estilo bastante importantes. No sé por qué querrías devolver un puntero a un char a menos que se pase a la función a través del puntero. ¿Podrías profundizar en esto? Es posible que tenga problemas mayores. –
¿Alguien puede responder por qué la implementación std :: basic_string no trata un puntero value_type nulo como una cadena vacía? – jmucchiello
@jmucchiello, creo que porque, fundamentalmente, una "cadena vacía" es muy diferente de un puntero que apunta a la dirección de memoria 0. Una cadena vacía '" "' en realidad ocupa memoria como un único carácter nulo. –