Мне не ясно, должно ли перенаправление stdout в файл из командной строки всегда перенаправлять cout (и аналогично для stderr и cerr).
В качестве теста я написал код ниже. Насколько я понимаю, с аргументом sync_with_stdio, установленным в true, что является значением по умолчанию, cout будет передавать свой вывод на стандартный вывод, и в этом случае перенаправление stdout также перенаправит cout, и это то, что произошло при использовании VS на моем компьютере с Win10.
Однако, когда я изменил аргумент на 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";
}