Namespaces
Variants

std:: flush

From cppreference.net
< cpp ‎ | io ‎ | manip
헤더 파일에 정의됨 <ostream>
template < class CharT, class Traits >
std:: basic_ostream < CharT, Traits > & flush ( std:: basic_ostream < CharT, Traits > & os ) ;

출력 시퀀스 os os. flush ( ) 를 호출하는 것처럼 플러시합니다.

이것은 출력 전용 I/O 조정자이며, out << std :: flush 와 같은 표현식으로 호출될 수 있습니다. 여기서 out std::basic_ostream 타입의 출력 스트림입니다.

목차

참고 사항

이 매니퓰레이터는 불완전한 출력 라인을 즉시 생성하는 데 사용될 수 있습니다. 예를 들어 장기 실행 프로세스의 출력을 표시할 때, 여러 스레드의 로깅 활동을 기록할 때, 또는 예기치 않게 크래시될 수 있는 프로그램의 로깅 활동을 기록할 때 사용됩니다. 또한 생성된 프로세스가 화면 I/O를 수행하는 경우(일반적인 예로 Windows에서 std:: system ( "pause" ) )에는 std::system 호출 전에 std::cout 의 명시적 플러시가 필요합니다. 대부분의 다른 일반적인 대화형 I/O 시나리오에서는 std::cin 으로부터의 입력, std::cerr 로의 출력, 또는 프로그램 종료 시 std:: cout . flush ( ) 호출을 강제하므로 std::cout 와 함께 사용할 때 std::endl 는 중복됩니다.

출력의 완전한 한 줄을 플러시해야 할 때, std::endl 매니퓰레이터를 사용할 수 있습니다.

모든 출력 작업을 플러시해야 할 때는 std::unitbuf 매니퓰레이터를 사용할 수 있습니다.

매개변수

os - 출력 스트림에 대한 참조

반환값

os (조작 후 스트림에 대한 참조).

예제

std::flush 가 없으면 출력 결과는 동일하지만, 실시간으로 표시되지 않을 수 있습니다.

#include <chrono>
#include <iostream>
template<typename Diff>
void log_progress(Diff d)
{
    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(d) << " ... "
              << std::flush;
}
int main()
{
    volatile int sink = 0;
    auto t1 = std::chrono::high_resolution_clock::now();
    for (int j = 0; j < 5; ++j)
    {
        for (int n = 0; n < 10000; ++n)
            for (int m = 0; m < 20000; ++m)
                sink += m * n; // do some work
        auto now = std::chrono::high_resolution_clock::now();
        log_progress(now - t1);
    }
    std::cout << '\n';
}

가능한 출력:

567ms ... 1137ms ... 1707ms ... 2269ms ... 2842ms ...

참고 항목

각 작업 후 출력 플러시 여부를 제어합니다
(함수)
' \n ' 를 출력하고 출력 스트림을 플러시합니다
(함수 템플릿)
기본 저장 장치와 동기화합니다
( std::basic_ostream<CharT,Traits> 의 public 멤버 함수)