私が質問している特定のコンテキストはありませんが、C++の初心者向けの本を読んでいるときに、ストリームオブジェクトを処理するときにendlストリームマニピュレータと改行エスケープ文字の両方の使用に気付きました。
その例は次のとおりです。
cout << "Hello World" << endl;
cout << "Hello World\n";
私の質問は:
ありがとう、StackExchange謝罪これを間違ったセクションに投稿した場合、データ構造として数えられると思った。
_o << std::endl
_は次のコードと同等です。
_o.put(o.widen('\n'));
o.flush();
_
つまり、ストリームをフラッシュする必要がある場合にのみ_std::endl
_を使用する必要があります。例えば:
ストリームをフラッシュする必要がない必要がない場合は、_\n
_の代わりに_std::endl
_を使用してください。 flush
への追加の呼び出しは、パフォーマンスを低下させる可能性があります(時には大幅に)。
詳細については、 cppreference.com を参照してください。
メモリ使用量について:_\n
_と_std::endl
_のどちらを心配するかは、ほぼ確実に不要なマイクロ最適化ですが、一般的に、_\n
_のメモリ使用量は少ないと思います。 _\n
_は、文字列リテラルの最後のもう1バイトですが、_std::endl
_の書き込みは、コンパイラによってput
およびflush
への(おそらくインライン化された)関数呼び出しに変換されます。
行末のプラットフォーム固有の違い(Windows _\r\n
_とLinuxおよびOS X _\n
_)は、_std::endl
_および_\n
_よりも低いレベルで処理されます。
\n
_を書き込むと、適切なプラットフォーム固有の行末に自動的に変換されます。プラットフォーム固有の行末を読み取る場合、ストリームはそれを自動的に_\n
_に変換します。std::cout
_および_std::cin
_の場合、テキストモードであるかのように扱われます。1)移植性のために、 編集:コメントに従って、行システム固有の末尾はより低いレベルで処理されます。endl
を使用します。 Windowsの改行は\r\n
、Linux \n
およびMac \r
。
2)endl
はストリームをフラッシュし、"\n"
ではない。
3)移植性に依存します。
メモリ使用量については、endl
を使用して他のストレージにできるだけ頻繁にフラッシュすることで、メモリ使用量を最小限に抑えることができます。ただし、パフォーマンスは低下します。
編集:いくつかの間違いを修正します。