본문 바로가기
Problem Solving/C++ 정리

C++ #1: iostream, namespace

by 행뱁 2019. 12. 5.

iostream

#include<iostream>은 preprocessor에 의해 우선적으로 처리된다.

iostream은 cin, cout, endl 등 기본 입출력과 관련된 객체를 정의한 헤더이다.

iostream은 표준 라이브러리 디렉터리에 존재하며, 표준 라이브러리에 있는 객체는 std namespace에 포함되어 있다.

 

cin, cout

cin >> input1 >> input2;
cout << "Result is " << input1 + input2 << endl;

cin, cout은 각각 입력, 출력 함수이다.

cin의 경우 >> 연산자로 입력 변수를 연결하며

cout의 경우 << 연산자로 출력 변수와 스트링 등을 연결한다.

 

2019.12.27. 추가

cin, cout은 scanf, printf보다 컴파일 속도가 느리다.

그러나 cin, cout의 속도를 scanf, printf만큼 올려주기 위한 Trick이 있다.

cin.tie(NULL);
ios::sync_with_stdio(FALSE);

이에 대한 자세한 설명은 아래 Reference의 링크를 참고하자.

또한 endl 대신 "\n"을 사용하는 것도 속도를 향상시키는 방법이다.

 

namespace

namespace는 변수, 함수 등의 식별자가 정의되는 영역이다.

 

namespace ns {

        // identifiers

}

와 같이 정의할 수 있다.

 

현재 코드가 위치하는 namespace가 아닌 다른 namespace의 멤버를 참조하려면 아래와 같이 한다.

ns_name::member_name

단 전역 범위의 멤버를 참조하려면 아래와 같이 한다.

::member_name

 

그러나 어떤 namespace의 멤버 사용이 빈번하면 아래와 같이 namespace 이름을 생략하고 사용할 수 있다.

using namespace ns_name;

c++ 코드 시작 부분에서 자주 볼 수 있는 using namespace std; 도 이것이다.

 

작은 프로그램이 아닌 여러 개발자가 참여하는 큰 프로그램의 경우

식별자의 이름이 겹쳐 충돌이 일어날 수 있기 때문에 이를 막기 위해 namespace가 도입되었으며,

이러한 맥락에서 using namespace std; 의 사용도 권장되지 않는다.

 

namespace와 소스 파일은 서로 독립적으로, 여러 소스 파일에 걸쳐 namespace를 정의하여 확장시킬 수 있다.

이 내용은 extern 키워드와 함께 나중에 추가한다.

 

References

https://hongku.tistory.com/72 (iostream)

https://wonjayk.tistory.com/205 (namespace)

https://www.acmicpc.net/problem/15552 (cin/cout trick)

https://stackoverflow.com/questions/31162367/significance-of-ios-basesync-with-stdiofalse-cin-tienull (cin/cout trick)

'Problem Solving > C++ 정리' 카테고리의 다른 글

C++14 STL 철저 입문) vector  (0) 2020.05.20
C++ #4: preprocessor directives  (0) 2019.12.07
C++ #3: call by value, address, reference  (0) 2019.12.06
C++ #2: reference variable  (0) 2019.12.05
C++ note  (0) 2019.12.05

댓글