2015-10-02 4 views
0

Я новичок в C++ и насколько я знаю, что использование escape-последовательности '\n' не будет очищать выходной буфер (как это происходит при использовании endl), но в моем случае при отладке следующей программы с использованием F11 (шаг в) под qt-creator на Ubuntu 14.04, вывод функции (которая 5) непосредственно печатается на консоль.Почему ` n` flush std :: cout?

#include <iostream> 

void printValue(int nValue) 
{ 
    std::cout << nValue << '\n'; 
} 

int main() 
{ 
    using namespace std; 
    printValue(5); 
    return 0; 
} 

Когда я удалил '\n' с выхода в строке №. 5, выход отложен до конца исполнения.

  • Почему это?
+0

См LibC функции: setbuf и setlinebuf. setlinebuf - это неявное умолчание для stdout/stderr [aka std :: cout/std :: cerr] для программ при их запуске. Для потоков, которые вы открываете, им задан размер буфера по умолчанию, и буфер должен заполняться до того, как он покраснел. –

ответ

0

Да, endl вызовет флеш, но это не означает, что буфер не может решить сбросить себя по другим причинам. См this reference, в частности, это:

Во многих реализациях, стандартный вывод строка буферизации, и писать «\ п» вызывает поток все равно

2

Время смыва не определено стандартом, поэтому поток может промываться в любое время.

0

Это фактически зависит от реализации, если '\n' видно в std::ostream триггерах промывки.

Принудительный и безопасный метод заключается в использовании std::endl.

Смежные вопросы