Namespaces
Variants

std:: endl

From cppreference.net
< cpp ‎ | io ‎ | manip
ヘッダーで定義 <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> の公開メンバ関数)