std::cout 输出的时间很奇怪

The timing of std::cout output is strange

#include <iostream>
#include <thread>
#include <chrono>
using namespace std;

int main()
{
    std::cout << "1";
    std::this_thread::sleep_for( std::chrono::milliseconds(1000) );

    std::cout << "2";
    std::this_thread::sleep_for( std::chrono::milliseconds(1000) );

    std::cout << "3";
    std::this_thread::sleep_for( std::chrono::milliseconds(1000) );

    return 1;
}
  

我希望每秒打印std::cout

但是当我运行这段代码的时候,结果值123是同时打印出来的

为什么?

请告诉我如何修复它。

您可能需要在每个 cout 之后刷新标准流,否则它们可能会等到程序结束时才一次刷新。

std::cout 缓冲:

C++11 27.4.2 [narrow.stream.objects]/3 : The object cout controls output to a stream buffer associated with the object stdout

所以你需要明确地刷新这个缓冲区来得到你想要的。以下是一些方法:

1.使用 operator<<std::flush

std::cout << "1" << std::flush;

2。使用免费函数std::flush(std::basic_ostream)

std::cout << "1";
std::flush(std::cout);

3。使用成员函数std::cout::flush()

std::cout << "1";
std::cout.flush();

4.使用 operator<<std::endl

std::cout << "1" << std::endl;

这当然也会插入一个换行符,这可能不是您想要的。

这是由于缓冲。 在每个 cout 之后,您需要使用 std::flush(std::cout);.

等任何语句来刷新缓冲区

这可能对您有所帮助。

#include <iostream>
#include <thread>
#include <chrono>
using namespace std;

int main(){
    std::cout << "1";
    //std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
    std::flush(std::cout);

    std::cout << "2";
    //std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
    std::flush(std::cout);

    std::cout << "3";
    //std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
    std::flush(std::cout);

    return 0;
}