본문 바로가기
Algorithm/각 종 함수 및 공부

ios_base::sync_with_stdio(false); cin.tie(NULL); 의 의미

by 코딩친구 2020. 5. 30.
반응형

1. ios_base::sync_with_stdio(false);

C 표준 스트림과 C ++ 표준 스트림 간의 동기화를 비활성화한다는 뜻이다.

 

기본적으로, 모든 표준 스트림이 동기화되있다.

그래서 평소 C++로 코딩하는 사람이라면, C와 C ++ 스타일 I / O를 혼합하여 편리하게 사용할 수 있었을 것이다.

 

예를 들면, printf()와 cout 함수를 같이 사용할 수 있는 것을 예로 들 수 있겠다.

 

동기화를 비활성화하면 C ++ 스트림에 자체 독립 버퍼가있어 C 및 C ++ 스타일 I / O를 혼합하는 것이 어려워진다.

- 단점

 

하지만 따로 동기화 된 C ++ 스트림은 스레드로부터 안전하다.

(다른 스레드의 출력이 인터리브 될 수 있지만 데이터 경쟁이 발생하지 않음).

또한 동기화를 끊으면 사용하는 버퍼의 수가 줄어들기 때문에 실행속도 자체는 향상된다.

- 장점

 

2. cin.tie(NULL);

cin에서 cout을 (를) 푼다는 뜻이다.

 

묶인 스트림은 한 스트림이 다른 스트림에서 각 I/O 작업 전에 자동으로 플러시(flush - 즉, 콘솔에 표시) 되도록 한다.

합리적인 사용자 상호 작용을 보장하기 위해 기본적으로 cin은 (는) cout에 연결되어 있다.

 

예를 들면 다음과 같다.

 

std::cout << "Enter name:";
std::cin >> name;

 

cin 및 cout이 묶여 있으면 프로그램이 사용자에게 입력을 요청하기 전에 출력이 플러시 될 것으로 예상 할 수 있다.

스트림을 풀면 프로그램 출력이 플러시 되지 않고 사용자에게 name을 입력하기를 요구되며,

"Enter name : " 메시지는 아직 보이지 않는다.

(cout이 기본적으로 버퍼링되어 있기 때문에 출력은 콘솔에서만 플러시 표시된다.)

(버퍼가 가득차거나 수동적으로 플러시를 시켜주기 전까지는 출력되지 않는다.)

 

따라서 cin에서 cout을 풀면 cout에서 입력을 받기 전에 무언가를 표시 할 때마다 cin을 수동으로 플러시해야한다!

 

 

 

 

 

저번 포스팅 코드 중

 

ios_base::sync_with_stdio(0);
cin.tie(0);

 

코드가 있어 이에 대해 알아보았다.

이런 식의 표기로도 혼용 가능한 것으로 보인다.

 

반응형