2

この質問がこれまたはあれの重複であると宣言する前に、私がオンライン審査員に問題を提出し\nて WA を取得し、次にstd::endlAC を取得したことを考慮してください。したがって、プラットフォーム認識のポイントに対する非常に具体的な回答が必要です\n。本当にプラットフォームを認識しており、他の質問への回答が主張するように、ランタイムはプラットフォームに従って正しい行末を実際に書き込みますか? もしそうなら、これがどのように起こったのか教えていただけますか??

プラットフォームの認識の問題に関する標準からの引用によって回答がサポートされる場合、私は本当に感謝しています. 他のすべての質問の回答 (クローズされたものも含む) を読んだので、「バッファをフラッシュする」ことを繰り返さないでください。

4

2 に答える 2

5

からC++11§27.7.3.8-

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

効果: os.put(os.widen('\n')) を呼び出し、次に os.flush() を呼び出します。

戻り値:os.

したがって、標準から、endlは出力ストリーム バッファをフラッシュしますが、フラッシュしないことは明らか\nです。通常、新しい行を印刷するために使用したいと思うでしょうがendl、それを行うたびに出力バッファもフラッシュされることに注意してください。

プラットフォームの認知度について

標準から、両方がまったく同じことを行うことは明らかです-まったく同じ方法で新しい行を印刷します。したがって、一方がプラットフォームに依存しない場合、もう一方も同じである必要があります。私は確かendlにプラットフォームに依存しないことを知っているので、 \n.

于 2012-03-14T09:42:56.733 に答える
5

std::endl'\n'を出力し、ストリームをフラッシュするマニピュレータです。ほとんどのカジュアルな使用では、それを使用する必要があります。ただし、大量のデータを出力する場合は、パフォーマンスが大幅に低下する可能性があります。その場合は、 を使用して'\n'ください。

編集:

プラットフォームの認識に関しては、どちらもまったく同じものを出力します。ストリームがテキスト モードで開かれた場合'\n'、プラットフォームに依存する行末の表現が発生します。Unix では 0x0A、Windows では 0x0D、0x0A、一部のメインフレームでは新しいレコードが開始されるなどです。ストリームがバイナリで開かれた場合モードでは、1 バイト (通常は 0x0A ですが、実際には使用される基本的な文字エンコーディングに依存します) が出力されます。

于 2012-03-14T09:44:01.197 に答える