Pergunta

Antes de declarar esta questão como uma duplicata de esse ou que, considere que enviei um problema para o juiz on-line com \n e consegui WA, e depois com std::endl e tenho AC.Então, preciso de uma resposta muito específica ao ponto de conhecimento da plataforma\n realmente conhece a plataforma e o tempo de execução realmente escreve a linha correta que termina de acordo com a plataforma, conforme afirmam as respostas às outras perguntas?Se sim, você poderia me dizer como isso aconteceu?

Se a resposta puder ser apoiada por uma citação do padrão sobre a questão do reconhecimento da plataforma, eu ficaria muito grato.Eu li as respostas de todas as outras perguntas (mesmo as fechadas), então, por favor, não repita a coisa de "liberar o buffer".

Foi útil?

Solução

De C++11, §27.7.3.8 -

namespace std
{
    template <class charT, class traits>
        basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
}

Efeitos: Chama os.put(os.widen(’ ’)), depois os.flush().

Retorna:os.

Então, a partir do padrão, fica claro que endl libera o buffer do fluxo de saída, enquanto \n não.Geralmente você vai querer usar endl para imprimir uma nova linha, mas você também deve ter em mente que toda vez que fizer isso, o buffer de saída também será liberado.

Sobre o reconhecimento da plataforma

Pelo padrão, é óbvio que ambos fazem exatamente a mesma coisa - imprimir uma nova linha exatamente da mesma maneira.Portanto, se um for independente de plataforma, o outro também deverá ser o mesmo.Desde que eu sei com certeza endl é independente de plataforma, o mesmo deve ser o caso para \n.

Outras dicas

std::endl é um manipulador que produz '\n', e, em seguida, libera o fluxo.Para uso mais casual, é o que você deve usar.No entanto, ao gerar grandes volumes de dados, isso pode resultar em um impacto significativo no desempenho; nesse caso, use '\n'.

EDITAR:

Com relação ao conhecimento da plataforma:ambos produzem exatamente a mesma coisa.Se o fluxo foi aberto em modo texto, o '\n' fará com que ocorra uma representação dependente da plataforma de um final de linha:0x0A no Unix, 0x0D, 0x0A no Windows, iniciar um novo registro em alguns mainframes, etc.Se o fluxo foi aberto no modo binário, ele causará a saída de um único byte (normalmente 0x0A, mas na verdade depende da codificação básica de caracteres usada).

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