будут ли clog и cout в С++ вести себя по-разному при выводе значения?
Я ожидаю аналогичного поведения для Cout и Clog, поскольку оба являются буферизованными выходами. Но когда я пытаюсь, получается по-другому.
COUT:
int main()
{
cout<<"Hello World" ;
while(1);
return 0;
}
Output: Nothing --> Since Cout is not flushed
CLOG:
int main()
{
clog<<"Hello World" ;
while(1);
return 0;
}
Output: Hello World
Вопрос : И COUT, и CLOG буферизуются, так почему же вывод не одинаков? Как печатается «Hello World» без очистки буфера
1 ответ
Прежде всего, я не понимаю цели бесконечного цикла. Если вы пытаетесь перевести поток в спящий режим, проверьте этот пост Сообщение StackOverflow о потоке, спящем в cpp .
Во-вторых, если вы хотите очистить поток, используйтеstd::cout << std::flush;
.
Что касается разницы между ними: в основном clog — это редко используемый поток вывода, похожий на cerr. В основном забивают вывод на stderr, аналогичный cerr, а не stdout. Их проверка может помочь вам понять разницу: COUT, CERR и CLOG , Tutorialspoint .
Теперь о разнице между stdout и stderr. Stdout всегда буферизуется и сбрасывается автоматически в удобное время или по явному запросу, в то время как stderr буферизуется не полностью и всегда выводит данные немедленно, без необходимости явного сбрасывания.