2011-11-12 11 views
7

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?

risposta

5

Sì, funzionerà (se si appende () a c_str per renderlo realmente chiamare la funzione) e l'affermazione passerà.

1

È 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.)

7

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.