C++ stdout的命令行重定向是否也应该重定向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输出仍然会被显示 如果能解

我不清楚从命令行将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