Como é que std :: ostringstream convertido para bool?
-
08-07-2019 - |
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?
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
Para referência: ostringstream :: operator void * () ostringstream :: operator! () .
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.