будут ли 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 буферизуется не полностью и всегда выводит данные немедленно, без необходимости явного сбрасывания.

Другие вопросы по тегам