C++ stdout的命令行重定向是否也应该重定向cout?
我不清楚从命令行将stdout重定向到文件是否也应该总是重定向cout(对于stderr和cerr也是如此) 作为测试,我编写了下面的代码。我的理解是,当sync_with_stdio的参数设置为true(默认值)时,cout将其输出流式传输到stdout,在这种情况下重定向stdout也将重定向cout,这就是在我的Win10机器上使用VS时发生的情况 然而,当我将参数更改为false时,所有三个输出仍然被重定向。我有一半的期望只有printf输出会被重定向,cout输出仍然会被显示 如果能解释一下发生了什么事情,我将不胜感激,因为我显然错过了一些东西。谢谢C++ stdout的命令行重定向是否也应该重定向cout?,c++,command-line,stdout,cout,output-redirect,C++,Command Line,Stdout,Cout,Output Redirect,我不清楚从命令行将stdout重定向到文件是否也应该总是重定向cout(对于stderr和cerr也是如此) 作为测试,我编写了下面的代码。我的理解是,当sync_with_stdio的参数设置为true(默认值)时,cout将其输出流式传输到stdout,在这种情况下重定向stdout也将重定向cout,这就是在我的Win10机器上使用VS时发生的情况 然而,当我将参数更改为false时,所有三个输出仍然被重定向。我有一半的期望只有printf输出会被重定向,cout输出仍然会被显示 如果能解
#include <iostream>
int main()
{
std::ios::sync_with_stdio(false);
std::cout << "a\n";
std::printf("b\n");
std::cout << "c\n";
}
#包括
int main()
{
std::ios::与stdio同步(false);
std::cout您误解了它的含义。它与重定向完全无关,它只涉及两个流之间的同步。如果设置为false
,则两个流可以独立缓冲
但最后两个流都会写入标准输出文件描述符,对于stderr和(读取)stdin也是如此
如果要重定向std::cout
,则需要通过。从(强调我的)重置其流缓冲区:
全局对象std::cout和std::wcout控制输出到实现定义类型的流缓冲区(派生自std::streambuf),与标准C输出流stdout关联。
:
<强>在每次输入/输出操作后,将标准C++流是否同步为标准C流。
std::cout
始终写入stdout