Pergunta

me deparei com este código.

    std::ostringstream str;
    /// (some usage)
    assert( ! str );

O que ostringstream significar quando usado em um bool contexto?

É este possivelmente um uso incorreto que acontece para compilar e executar?

Foi útil?

Solução

Diz-lhe se o fluxo é atualmente válido. Isso é algo que todos os fluxos podem fazer. Um fluxo de arquivo, por exemplo, pode ser considerada válida se o arquivo não foi aberto corretamente.

Como uma nota lado, esta funcionalidade (testando uma corrente como um booleano) é conseguida por sobrecarga explicit operator bool em C ++ 11 e mais tarde e sobrecarregando o operador de conversão void* em versões antes C ++ 11 .

Aqui está um link contendo alguns exemplos de por que um fluxo pode falhar . Esta não é específico para fluxos de cordas, mas se aplica a eles.

Editar:. mudou bool para void* após Martin Iorque apontou meu erro

Outras dicas

A expressão é válida e avalia o estado do fluxo. Este recurso é mais comumente usado em fluxos de entrada:

istringstream is;
is.str( "foo" );
int x;
is >> x;

if ( ! is ) {
   cerr << "Conversion failed";
}

Eu não sei como qualquer do padrão streaming de funções poderia causar um ostringstream a ir mal, mas você poderia certamente escrever um você mesmo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top