Differenza tra STD :: ENDL e \ N (per quanto riguarda la consapevolezza della piattaforma)

StackOverflow https://stackoverflow.com//questions/9699280

  •  13-12-2019
  •  | 
  •  

Domanda

Prima di dichiarare questa domanda come duplicata di o Che , ti preghiamo di considerare che ho inviato un problema a il giudice online con \n e ho ottenuto wa, e poi con std::endl e ha ottenuto AC. Quindi, ho bisogno di una risposta molto specifica al punto di consapevolezza della piattaforma : è \n Platform in realtà consapevole e il runtime scrive davvero la linea corretta che termina secondo la piattaforma come le risposte alle altre domande ? Se sì, potresti per favore dimmi come è successo ??

Se la risposta può essere supportata da una citazione dallo standard per quanto riguarda il problema della consapevolezza della piattaforma, sarei davvero grato. Ho letto tutte le risposte delle altre domande (anche le chiuse), quindi per favore non ripetere la cosa "Flushs the Buffer".

È stato utile?

Soluzione

Da C++11, §27.7.3.8 -

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

.

Effetti: chiama Os.put (OS.Widen ('\ N')), quindi OS.Flush ().

Restituisce: OS.

Allora, dallo standard è chiaro che endl arrossisce il buffer del flusso di uscita, mentre \n no.Generalmente si consiglia di utilizzare endl per la stampa di una nuova riga, ma dovresti anche tenere presente che ogni volta che si fa il tampone di uscita anche tu flossare.

Informazioni sulla consapevolezza della piattaforma

Dallo standard è ovvio che entrambi fa esattamente la stessa cosa - stampare una nuova linea nello stesso modo esatto.Quindi, se uno è indipendente dalla piattaforma, l'altra dovrebbe anche essere la stessa.Dal momento che so per certo endl è indipendente dalla piattaforma, lo stesso dovrebbe essere il caso per \n.

Altri suggerimenti

std::endl è un manipolatore che emette '\n', quindi cancella il flusso.Per l'uso più casual, è ciò che dovresti usare.Quando emettono grandi volumi di dati, tuttavia, può comportare un successo significativo performance, nel qual caso, utilizzare '\n'.

Modifica:

Per quanto riguarda la consapevolezza della piattaforma: entrambe in uscita esattamente la stessa cosa.Se il flusso è stato aperto in modalità testo, il '\n' causerà una rappresentazione dipendente dalla piattaforma di un finale di linea: 0x0a in UNIX, 0x0D, 0x0A in Windows, avviare un nuovo record sotto alcuni mainframe, ecc. Se il flusso è stato aperto inModalità binaria, causerà un singolo byte (tipicamente 0x0a, ma in realtà dipende dalla codifica del carattere di base utilizzata) da emettere.

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