Сброс OREAM, C ++
Вопрос
У меня есть 2 разных stakreams, один из них Cerr, используя один и тот же streambuffer, у меня есть некоторые библиотеки, которые могут быть изменены как-то, (флаги? Модификаторы формата?).
cerr.rdbuf(&mystreambuffer);
ostream teststream(&mystreambuffer);
cerr << "This " << " is " << " a " << " test";
teststream << "This " << " is " << " a teststream " << " test";
Печать:
This
is
a
test
This is a teststream test
Отладка mystreambuffer
Я заметил, что звонки CERR mystreambuffer->sync()
каждый <<
Операция во время Teststream вообще не называет это.
Если я правильно cerr
Тогда это просто стандартный остром, почему я вижу эту разницу в разных временах? Как я могу сбросить CERR обратно на обычные операции промывки?
РЕДАКТИРОВАТЬ: Я вижу, что вы, ребята, комментируете UnitBuf, и оно будет по умолчанию в CERR, но если это было по умолчанию, не будет ли он написать шаг за шагом здесь также?
#include <iostream>
int main(){
std::cerr << "This " << " is " << " a cerr " << " test\n";
std::cout << "This " << " is " << " a cout " << " test\n";
}
Cobain /tmp$ ./test
This is a cerr test
This is a cout test
Решение
Пытаться std::cerr.unsetf( std::ios_base::unitbuf );
. Отказ Этот флаг включен для cerr
по умолчанию.
Другие советы
IOS :: Флаг UnitBuf - это причина того, что установлено значение по умолчанию для CERR.
Вам необходимо использовать манипулятор NounitBuf, чтобы исправить его. Некоторые старые библиотеки могут не иметь его, если так, то используйте unsetf.
Редактировать: Настройка по умолчанию для UnitBuf зависит от реализации :)