Come si convertirà std :: ostringstream in bool?
-
08-07-2019 - |
Domanda
Mi sono imbattuto in questo codice.
std::ostringstream str;
/// (some usage)
assert( ! str );
Cosa significa ostringstream
se utilizzato in un contesto bool
?
È forse un uso errato che si verifica per compilare ed eseguire?
Soluzione
Ti dice se lo stream è attualmente valido. Questo è qualcosa che tutti gli stream possono fare. Un flusso di file, ad esempio, può non essere valido se il file non è stato aperto correttamente.
Come nota a margine, questa funzionalità (testare un flusso come bool) viene ottenuta sovraccaricando esplicito operatore bool
in C ++ 11 e versioni successive e sovraccaricando il void *
operatore cast nelle versioni prima di C ++ 11 .
Ecco un link contenente alcuni esempi del perché uno stream potrebbe non riuscire . Questo non è specifico per i flussi di stringhe, ma si applica a loro.
Modifica: ha cambiato bool
in void *
dopo che Martin York ha segnalato il mio errore.
Altri suggerimenti
Per riferimento: ostringstream :: operator void * () e ostringstream :: operator! () .
L'espressione è valida e valuta lo stato del flusso. Questa funzione è più comunemente usata sui flussi di input:
istringstream is;
is.str( "foo" );
int x;
is >> x;
if ( ! is ) {
cerr << "Conversion failed";
}
Non sono sicuro di come una qualsiasi delle funzioni di streaming standard possa causare il malfunzionamento di una ostringstream, ma potresti sicuramente scriverne una tu.