为什么' '会刷新std::cout
Why does ` ` flush std::cout?
我是 c++ 的新手,据我所知,使用转义序列'n'
不会刷新输出缓冲区(就像使用endl
时发生的那样),但在我的情况下,在Ubuntu 14.04上的qt-creator下使用F11 (step into)调试以下程序时,函数的输出(这是5
)直接被打印到控制台。
#include <iostream>
void printValue(int nValue)
{
std::cout << nValue << 'n';
}
int main()
{
using namespace std;
printValue(5);
return 0;
}
当我从第1行输出中删除'n'
时。5、输出延迟到执行结束。
- 为什么?
是的,endl
将导致刷新,但这并不意味着缓冲区不能出于其他原因决定自己刷新。请看这个参考,特别是这个:
在许多实现中,标准输出是行缓冲的,写入'n'无论如何都会导致刷新
标准没有定义冲洗时间,因此流可以在任何时间冲洗。
它实际上依赖于实现,如果'n'
在std::ostream
中看到触发刷新。
强制且安全的方法是使用std::endl
。
相关文章:
- std::cout.imbue()多重调用
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- std::cout输出int时出现编译错误
- 在这种情况下显式调用时,std::cout 如何更改析构函数的行为?
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 为什么我需要做'using namespace std'而不是"使用 std::cout"?
- main() 中的 std::cout 在调试期间不会在调试控制台中打印任何内容
- 错误:在尝试检测 std::cout 是否<< t 时,功能强制转换为数组类型;有效
- std::cout 来自多个线程
- 在 c++ 中以十六进制格式打印无符号字符(BYTE).使用 std::cout
- Cuda 基本程序 (将值写入矩阵和 std:cout 不起作用) ;主功能不启动
- 使用 std::addressof(std::cout) 而不是 &std::cout 是否有任何风险?
- 是否可以为 std::cout 创建别名?
- std::cout 在打印变量与函数表达式时的行为不同
- 带有 std::cout 的多线程控制台文本动画
- 为什么在语句"std::cout << std::endl;"中使用时需要命名空间限定,给定依赖于参数的查找?
- "std::cout << std::endl;"如何编译?
- std::cout/std::cerr seg faults