2014-03-13 2 views
1

cout을 사용할 때마다 출력 버퍼가 자동으로 비워지고 비워지는지 알고 싶습니다. 플러시되지 않으면 출력 버퍼의 내용을 확인할 수있는 방법이 있습니까? cout 만 사용하고 endl을 사용하지 않는 경우를 말합니다.cout을 사용할 때 출력 버퍼가 자동으로 플러시됩니까?

다음 코드를 고려하십시오

cout << "Hello, how are you?"; //Without using endl 

내가 버퍼에 미치는 영향을 플러시 확인하기 위해 이제 stringstream을 사용했다. 나는 다음과 같은 코드를 가지고 있지만, 이미 출력물이 "GoodDay"로 표시되는 이유는 무엇입니까?

string str; 
stringstream ss; 
ss << "GoodDay"; 
ss << flush; 
ss >> str; 
cout << str; 
+0

'std :: endl'을 사용하거나 버퍼링 된 출력이 실제로 유지 될 수 있다면 더 이상 쓸 수 없습니다. 내용 확인에 대한 질문에 대해서는 ['std :: ios_base :: register_callback'] (http://en.cppreference.com/w/cpp/io/ios_base/register_callback)을 살펴 보는 것이 유용 할 수 있습니다. [내 대답은 여기] (http://stackoverflow.com/questions/22263636/fstream-c-automatic-line-addition/22263699#22263699)도 통찰력을 줄 수 있습니다. –

+0

그렇다면 std :: endl을 사용하지 않고 버퍼링 된 출력보다 더 많은 것을 쓰지 않으면 출력 버퍼가 cout을 사용할 때 여전히 플러시됩니까? 답장을 보내 주셔서 감사합니다. – user3347939

+0

출력 버퍼가 여전히 cout을 사용할 때 플러시됩니까? 'Nope ... –

답변

0

stringstream은 콘텐츠를 플러시하지 않아야합니다. 실제로 플러시 조작자는 문자열 스트림에 아무런 의미가 없습니다. 입력이 즉시 문자열 스트림에 의해 래핑 된 버퍼에 쓰여지므로 그래서 "GoodDay"가 표시됩니다.

관련 문제