Frage

Bevor Sie diese Frage als Duplikat von deklarieren Das oder Das, Bitte beachten Sie, dass ich ein Problem an gesendet habe Der Online-Richter mit \n und bekam WA, und dann mit std::endl und bekam Klimaanlage.Ich brauche also eine ganz konkrete Antwort auf den Punkt Plattformbewusstsein:Ist \n wirklich plattformbewusst, und schreibt die Laufzeitumgebung wirklich das richtige Zeilenende entsprechend der Plattform, wie die Antworten auf die anderen Fragen behaupten?Wenn ja, könnten Sie mir bitte sagen, wie das passiert ist?

Wenn die Antwort durch ein Zitat aus dem Standard zum Problem der Plattformbekanntheit gestützt werden kann, wäre ich wirklich dankbar.Ich habe die Antworten aller anderen Fragen gelesen (auch der geschlossenen), also wiederholen Sie bitte nicht die Sache mit dem „Leeren des Puffers“.

War es hilfreich?

Lösung

Aus C++11, §27.7.3.8 -

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

Auswirkungen: Ruft os.put(os.widen(’ ’)) und dann os.flush() auf.

Gibt zurück:os.

Aus dem Standard geht also klar hervor endl leert den Ausgabestream-Puffer, while \n nicht.Im Allgemeinen möchten Sie verwenden endl zum Drucken einer neuen Zeile, aber Sie sollten auch bedenken, dass jedes Mal, wenn Sie dies tun, auch der Ausgabepuffer geleert wird.

Über die Plattformbekanntheit

Aus dem Standard geht hervor, dass beide genau das Gleiche tun – eine neue Zeile auf genau die gleiche Weise drucken.Wenn also einer plattformunabhängig ist, sollte der andere auch derselbe sein.Da ich es genau weiß endl ist plattformunabhängig, das sollte auch der Fall sein \n.

Andere Tipps

std::endl ist ein Manipulator, der ausgibt '\n', spült dann den Stream.Für den gelegentlichen Gebrauch sollten Sie es verwenden.Bei der Ausgabe großer Datenmengen kann es jedoch zu erheblichen Leistungseinbußen kommen. Verwenden Sie in diesem Fall '\n'.

BEARBEITEN:

In Bezug auf die Plattformbekanntheit:beide geben genau das Gleiche aus.Wenn der Stream im Textmodus geöffnet wurde, wird der '\n' bewirkt, dass eine plattformabhängige Darstellung eines Zeilenendes erfolgt:0x0A unter Unix, 0x0D, 0x0A unter Windows, starten Sie einen neuen Datensatz unter einigen Mainframes usw.Wenn der Stream im Binärmodus geöffnet wurde, wird ein einzelnes Byte (normalerweise 0x0A, aber es hängt tatsächlich von der verwendeten grundlegenden Zeichenkodierung ab) ausgegeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top