숨창고
ios::sync_with_stdio(false), cin.tie(NULL) 사용법과 설명 본문
1. ios::sync_with_stdio(false);
C 표준 stream과 C++ 표준 stream의 동기화를 끊습니다.
기본적으로, 모든 표준 stream들은 동기화 되어있습니다. 그래서 우리는 C와 C++의 입출력방식을 자유롭게 혼용할 수 있습니다.
동기화를 끊는다면, C++ stream들은 독립적인 버퍼를 갖게되며, C와 C++의 입출력방식을 혼용해서 쓰는 것이 굉장히 위험해집니다.
또한 동기화된 C++ stream은 thread-safe합니다. (다른 thread의 output이 동시에 액세스해도 충돌하지 않습니다.)
동기화를 끊으면 사용하는 버퍼의 수가 줄어들기 때문에 실행속도 자체는 향상됩니다.
2. cin.tie(NULL);
cin을 cout으로부터 untie합니다. stream을 tie하면 다른 stream에서 입출력요청이 오기전에 stream을 flush시킵니다.:
std::cout << "Enter name:";
std::cin >> name;
위의 예시 cin과 cout이 tie된 상태라면, program이 user에게 입력을 요구하기 전에 output이 flush됩니다.
stream을 untie하면 output이 flush되지 않은채로 user에게 입력을 요구하게되며, 따라서 "Enter name" 메세지는 출력되지 않을 것입니다.
(기본적으로 cout의 output은 buffer가 가득차거나 수동적으로 flush를 시켜주기 전까지 출력되지 않습니다.)
그러므로 만약 cin과 cout을 untie한다면, cin으로 입력을 받기전에 뭔가를 띄우고 싶다면 매번 수동적으로 cout을 flush 시켜줘야합니다.
'공부 > C++' 카테고리의 다른 글
[C++] string class (문자열) (0) | 2018.11.05 |
---|---|
[C++] vector에 대해서 (0) | 2018.11.02 |
[C++] <cstdio>, <iostream>, <stdio.h>에 대해서 (0) | 2018.11.02 |