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?

È stato utile?

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

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top