2015-05-19 127 views
3

据我所知,将std::endl转换为std::cout会刷新它。我明白,这种行为对大多数应用程序都有意义。手动刷新cout只有

我的问题是,我有一些输出使用多个std::endl's并因此刷新输出。这对于我的程序的性能来说真的很糟糕,并且由于我跳了很多,所以还导致了很多图形故障。

所以我的问题是,如果我可以告诉std::cout与下次的冲水等到我明确地调用std::cout.flush()或流std::flushstd::cout
如果这是可能的,我也想知道我可以如何扭转这种情况,因为它对我来说并不总是合情合理的。

+1

'std :: endl'是对'std :: ostream :: flush'的明确调用,然后写入一个换行符。如果你不想'std :: endl'来刷新,不要使用'std :: endl'。 – 0x499602D2

+1

@ 0x499602D2 *“'std :: endl'是对'std :: ostream :: flush'的明确调用,然后写入换行符”* - 完全相反...... newline * then * flush。 –

回答

6

使用std::cout << '\n'而不是std::endl。这可以避免每行之后刷新。 std::endl将始终刷新,因为这是它的目的。没有选项可以禁用该行为。但是,根本没有要求使用std::endl

如果要增加标准输出的缓冲区大小,可以尝试increase buffer for cout

+0

这可以在一定程度上起作用,但是'cout'被缓冲,并且在缓冲区填满时最终会自己刷新。 – AndyG

+4

OP只是试图减少冲洗以提高性能,他并不需要完全消除它。 – Barmar

+1

显然,如果缓冲区填满,你必须刷新。没有办法避免这种情况。 – b4hand