Во-первых, нет требования, чтобы std::cout
(или даже std::cerr
) be небуферизованный. Единственным требованием является то, что std::cerr
имеют std::basic_ios::unitbuf
набор (так, что он будет заподлицо в конце каждого выходная функция: <<
или неформатная выходная функция). С другой стороны, если вы не вызвали std::basic_ios::sync_with_stdio(false)
, , вывод в потоки C++ и вывод в соответствующие потоки C (т. Е. std::cout
и stdout
) должны иметь одинаковые эффекты. В теории, это может быть сделано несколько способов: stdout
функций могут вперед те std::cout
, std::cout
выхода может направить stdout
, или они могут совместно использовать некоторые общие реализации буфера под капота. На практике практически все реализации имеют std::cout
пересылка на stdout
.
С определяет, что stderr
не может быть полностью буферизация, и что stdout
может быть полностью буферном только тогда, когда она может быть определена не для обозначения интерактивного устройства (для некоторой реализации определенного значения «интерактивного устройства»). Как правило, stdout
будет линия буферизацией (а понятие, которое не существует в iostream), и stderr
будет небуферизован, но это не гарантируется стандартом C (и не может быть правда сегодня — последний раз, когда я действительно смотрел было более двадцати лет назад). Во всяком случае, реализация которых только направляет stdout
будет следовать правилам реализации C она направляет, и один, что оленья кожа»все еще необходимо предпринять некоторые шаги, чтобы гарантировать, что выход на std::cout
и stdout
выходит в правильном порядке, и что stdout
ведет себя «как если бы», он подчинялся правилам C.
Если вы беспокоитесь о производительности, вы можете захотеть запустить некоторые тесты . Попробуйте измерение времени, которое требуется для вывода на std::ofstream
вы открыли себя, по сравнению с временем, которое требуется для вывода std::cout
(оба с и без заехав sync_with_stdio
), с выходом перенаправлен. Различия должны быть интересными.
У этого есть информация: http://stackoverflow.com/questions/11392511/c-buffered-stream-io – stijn