Como você limpa uma variável stringstream?

Já tentei várias coisas,

std::stringstream m; m.empty(); m.clear(); 

ambos não funcionam.

    Para todos os tipos de biblioteca padrão, a function de membro empty() é uma consulta, não um comando, isto é, significa “você está vazio?” não “por favor, jogue fora seu conteúdo”.

    A function membro clear() é herdada do ios e é usada para limpar o estado de erro do stream, por exemplo, se um stream de arquivo tiver o estado de erro definido como eofbit (fim de arquivo), chamar clear() definirá o estado de erro de volta ao goodbit (sem erro).

    Para limpar o conteúdo de uma stringstream , use:

     m.str(""); 

    está correto, embora usando:

     m.str(std::string()); 

    é tecnicamente mais eficiente, porque você evita invocar o construtor std::string que leva const char* . Mas qualquer compilador nos dias de hoje deve ser capaz de gerar o mesmo código em ambos os casos – então eu apenas usaria o que for mais legível.

    Você pode limpar o estado de erro e esvaziar o strignstream em uma única linha

     std::stringstream().swap(m); // swap m with a default constructed stringstream 

    Isso efetivamente redefine m para um estado padrão construído

     m.str(""); 

    parece funcionar.

    Esta deve ser a maneira mais confiável, independentemente do compilador:

     m=std::stringstream(); 

    Eu estou sempre procurando:

     { std::stringstream ss; ss < < "what"; } { std::stringstream ss; ss << "the"; } { std::stringstream ss; ss << "heck"; } 

    meus 2 centavos:

    isso pareceu funcionar para mim em xcode e dev-c ++, eu tinha um programa na forma de um menu que se executado iterativamente conforme o pedido de um usuário irá preencher uma variável stringstream que funcionaria ok na primeira vez que o código seria executar mas não limpar o stringstream na próxima vez que o usuário executar o mesmo código. mas as duas linhas de código abaixo finalmente esclareceram a variável stringstream toda vez antes de preencher a variável string. (2 horas de tentativa e erro e pesquisas no google), btw, usando cada linha por conta própria não faria o truque.

     //clear the stringstream variable sstm.str(""); sstm.clear(); //fill up the streamstream variable sstm < < "crap" << "morecrap"; 

    É um problema conceitual.

    Stringstream é um stream, portanto seus iteradores são encaminhados, não podem retornar. Em um stream de saída, você precisa de um flush () para reinicializá-lo, como em qualquer outro stream de saída.

    Estes não descartam os dados na stringstream no gnu c ++

      m.str(""); m.str() = ""; m.str(std::string()); 

    O seguinte esvazia o stringstream para mim:

      m.str().clear();