str metodos libreria library example c++ string c++-standard-library

metodos - string c++ library



¿Asignar un nullptr a un std:: string es seguro? (3)

Mi pregunta es si GetValue () devuelve NULL myString se convierte en una cadena vacía. ¿Está indefinido? ¿O se segfault?

Es un comportamiento indefinido. El compilador y el tiempo de ejecución pueden hacer lo que quieran y seguir siendo compatibles.

Estaba trabajando en un pequeño proyecto y llegué a una situación en la que sucedió lo siguiente:

std::string myString; #GetValue() returns a char* myString = myObject.GetValue();

Mi pregunta es si GetValue() devuelve NULL myString convierte en una cadena vacía. ¿Está indefinido? ¿O se segfault?


Es un error de ejecución.

Usted debe hacer esto:

myString = ValueOrEmpty(myObject.GetValue());

donde ValueOrEmpty se define como:

std::string ValueOrEmpty(const char* s) { return s == nullptr ? std::string() : s; }

O podrías devolver const char* (tiene mejor sentido):

const char* ValueOrEmpty(const char* s) { return s == nullptr ? "" : s; }

Si devuelve const char* , entonces en el sitio de la llamada, se convertirá en std::string .


Pequeña pregunta interesante. Según la norma C ++ 11, sec. 21.4.2.9,

basic_string(const charT* s, const Allocator& a = Allocator());

Requiere: s no será un puntero nulo.

Dado que el estándar no le pide a la biblioteca que lance una excepción cuando no se cumple este requisito en particular, parece que pasar un puntero nulo provocó un comportamiento indefinido.