¿Cómo se importa si mi código C++ (como se muestra más abajo) tiene una cadena inicializada como una cadena vacía:cadenas de inicialización como nulo vs cadena vacía
std::string myStr = "";
....some code to optionally populate 'myStr'...
if (myStr != "") {
// do something
}
vs no/inicialización nulo:
std::string myStr;
....some code to optionally populate 'myStr'...
if (myStr != NULL) {
// do something
}
¿Existen mejores prácticas o errores al respecto?
'NULL' (conceptualmente) es un puntero y solo debe utilizarse como tal. Un 'std :: string' no es un puntero, por lo que no debe combinarse. PD. las inicializaciones son las mismas: el ctor de 'std :: string' lo establece en la cadena vacía. – MSalters
@MSalters hola Estoy de acuerdo con su punto, pero si los tipos parecen ser incompatibles, ¿por qué el compilador no arroja un error? Tengo VS 2010 y silenciosamente inicializa std :: string con NULL. –
@Surfing_SO: Hay un constructor de cadenas que toma un puntero a una matriz de caracteres, terminada por un carácter cero ... incorrectamente no pasó ese puntero (NULL no apunta a una matriz de caracteres, ni a ninguna otra cosa). Esto es un comportamiento indefinido y cualquier cosa puede suceder en ese caso. – MSalters