Questo frammento di codice è OK o risulta in un comportamento non definito?Chiamare c_str della stringa vuota
std::string s;
assert(strlen(s.c_str())==0);
Se non è un comportamento indefinito, passerà sopra asserzione?
Questo frammento di codice è OK o risulta in un comportamento non definito?Chiamare c_str della stringa vuota
std::string s;
assert(strlen(s.c_str())==0);
Se non è un comportamento indefinito, passerà sopra asserzione?
Sì, funzionerà (se si appende ()
a c_str
per renderlo realmente chiamare la funzione) e l'affermazione passerà.
È un errore di compilazione (se le asserzioni sono abilitate), dal momento che un const char *(std::string::*)()
non può essere convertito implicitamente in const char *
.
(Tongue solo a metà nella guancia.)
Ciò è perfettamente definito e l'affermazione è superata. La funzione c_str() restituirà sempre una stringa C terminata da zero valida.
Uno normalmente usa empty() per verificare una stringa vuota.