setbuf()是否影响cout
Does setbuf() affect cout?
再一次,我的老师无法回答我的问题。我知道谁能…
所以,我从来没有真正学习过C。很明显,在C++中,我会一直使用cout语句。在最近的一次作业中,我的老师告诉我们一定要放
setbuf( stdout , NULL );
在main()的顶部,以便获得未缓冲的输出,从而使我们能够正确地看到输出。
我的问题是:这个语句会影响cout语句吗,或者只是我调用的printf()语句?
提前感谢!
默认情况下,iostreams和stdio是同步的。参考
不过,这并不意味着手动调整stdio缓冲区是个好主意!您可能希望使用std::endl
或std::flush
(来自<ostream>
),这可能会对您有所帮助。例如
std::cout << "Hello, world!" << std::endl;
或
std::cout << "Hello, world!n" << std::flush;
两者的作用相同。(std::endl
=打印结束线,然后冲洗。)
默认情况下,如果stdout或cout正在打印到控制台,则输出是行缓冲的。这意味着打印的每一行换行符都将刷新输出。只要你想覆盖行为,你就可以显式地调用flush(),以防输出将被重定向到一个文件,并且你想使用tail-f并且需要实时的某些输出。
正如Chris所说,sync_with_stdio应该将未缓冲的stdout与未缓冲的cout绑定(默认情况下),但如果您所做的只是使用cout,而不是在stdout上使用setbuf,那么更好的选择是在rdbuf返回的指针上使用pubsetbuf。即:
// make cout unbuffered
std::cout.rdbuf()->pubsetbuf(0, 0);
另一个有趣的函数是tie。
通常,当立即看到输出很重要时,我们谈论的是复杂的高度可靠的财务程序,它必须将交易记录到硬盘上,然后才能将其实际发送给交易对手。或者,(更常见的情况)即使程序崩溃,我们也希望看到调试消息。
既然你在学习,我就认为你在处理第二个案子。在这种情况下,我的建议是使用stderr而不是stdout。默认情况下,它是无缓冲的,您可以将它与stdout分开重定向,将输出放在一个位置,将日志记录放在另一个位置。
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- std::cout.imbue()多重调用
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 为什么擦除方法会影响结束方法
- 内联如何影响模块接口中的成员函数
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 在 COUT 语句中使用 COUT 调用函数
- GCC 4.8.2 自动矢量化由于 cout 而失败
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 在容量内调整矢量大小时的性能影响
- std::cout会影响编译的结果吗
- 影响STD :: COUT对程序的性能
- 为什么 cout.precision() 会影响整个流
- cout 语句如何影响所写代码的 O/P
- 虚拟键码到unicode的映射受写入std::cout的影响
- 为什么 cout 的默认精度不会影响评估结果?
- setbuf()是否影响cout