std:: endl
|
ヘッダーで定義
<ostream>
|
||
|
template
<
class
CharT,
class
Traits
>
std:: basic_ostream < CharT, Traits > & endl ( std:: basic_ostream < CharT, Traits > & os ) ; |
||
出力シーケンス os に改行文字を挿入し、 os. put ( os. widen ( ' \n ' ) ) を呼び出したかのようにフラッシュし、その後 os. flush ( ) を実行します。
これは出力専用のI/Oマニピュレータであり、
out
<<
std
::
endl
のような式で、あらゆる
out
が
std::basic_ostream
型である場合に呼び出すことができます。
目次 |
注記
このマニピュレータは、例えば長時間実行されるプロセスの出力を表示する場合、複数スレッドのログ活動、または予期せずクラッシュする可能性のあるプログラムのログ活動を記録する際に、即座に出力行を生成するために使用できます。また、
std::cout
の明示的なフラッシュは、
std::system
を呼び出す前に、生成されたプロセスが画面I/Oを実行する場合にも必要です。その他の通常の対話的I/Oシナリオでは、
std::endl
は
std::cout
と共に使用される場合、冗長です。なぜなら、
std::cin
からの入力、
std::cerr
への出力、またはプログラムの終了が
std::
cout
.
flush
(
)
の呼び出しを強制するためです。一部の情報源で推奨されている、
'
\n
'
の代わりに
std::endl
を使用することは、出力パフォーマンスを著しく低下させる可能性があります。
多くの実装では、標準出力は行バッファリングされており、
'
\n
'
を書き込むと、
std
::
ios
::
sync_with_stdio
(
false
)
が実行されていない限り、いずれにせよフラッシュが発生します。そのような状況では、不必要な
endl
はファイル出力のパフォーマンスのみを低下させ、標準出力のパフォーマンスには影響しません。
このWikiのコードサンプルは Bjarne Stroustrup および The C++ Core Guidelines に従い、標準出力のフラッシュは必要な場合にのみ行っています。
不完全な出力行をフラッシュする必要がある場合、 std::flush マニピュレータを使用できます。
出力のすべての文字をフラッシュする必要がある場合、 std::unitbuf マニピュレータを使用することができます。
パラメータ
| os | - | 出力ストリームへの参照 |
戻り値
os (操作後のストリームへの参照)。
例
endl
の代わりに
'
\n
'
を使用すると、出力は同じになりますが、リアルタイムで表示されない場合があります。
#include <chrono> #include <iostream> template<typename Diff> void log_progress(Diff d) { std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(d) << " passed" << std::endl; } int main() { std::cout.sync_with_stdio(false); // on some platforms, stdout flushes on \n static volatile int sink{}; const auto t1 = std::chrono::high_resolution_clock::now(); for (int i = 0; i < 5; ++i) { for (int j = 0; j < 10000; ++j) for (int k = 0; k < 20000; ++k) sink += i * j * k; // do some work log_progress(std::chrono::high_resolution_clock::now() - t1); } }
出力例:
566ms passed 1133ms passed 1699ms passed 2262ms passed 2829ms passed
関連項目
|
各操作後に出力をフラッシュするかどうかを制御する
(関数) |
|
|
出力ストリームをフラッシュする
(関数テンプレート) |
|
|
基盤となる記憶装置と同期する
(
std::basic_ostream<CharT,Traits>
の公開メンバ関数)
|