본문 바로가기
IT/C++(CPP)

CPP 초급 강좌 2. std namespace / C++

by 신림83 2020. 9. 23.
반응형

CPP 초급 강좌 2. std namespace / C++

std namespace?

 C++을 설계할 때는 C++ 표준 라이브러리(Ex. cin, cout)의 모든 식별자를 직접 사용할 수 있었습니다. 이럴 경우 이후로 사용자가 직접 만든 식별자 이름과 충돌할 수도 있고,  또 표준 라이브러리에 도입된 새로운 기능이 충돌할 수 있으므로 한 버전의 C++에서 컴파일될 프로그램이 향후 버전의 C++에서 컴파일되지 않을 수 있습니다. 그래서 C++은 표준 라이브러리의 모든 기능을 std namespace라는 특별한 영역으로 이동시켰습니다.

 

예제를 보면서 설명해보겠습니다.

예제 1.

예제 1과 같이, <algorithm> 헤더의 min 함수를 호출하려고 한다고 합시다.

 

위와 같이 코딩하고 빌드 해보면 에러입니다. min 함수를 찾을 수 없습니다. 

 

C++ 표준 모든 요소는 std 이름공간안에 존재합니다. min 할 수를 사용하려고 하면 아래와 같이 사용할 수 있습니다.

 

1. 한정된 이름 quailfied name 

예제 2.

2. using 선언

예제 3.

3. using 지시어

예제 4.

이전 강좌에서도 말씀드렸지만 1번으로 명시적으로 호출해주는것이 좋습니다.

3개의 경우 모두 정상독작합니다. 하지만 2,3번의 경우는 이름 충돌의 가능성이 커집니다.

아래에서 이름충돌의 경우를 보며 추가 설명해보겠습니다.

 

기존 예약어의 사용

예제 5.

예제 5번을 컴파일이 될까요? 되지 낳습니다. 왜냐하면 count라는 변수를 사용했는데, 이미 count는 algorithm에서 사용하는 함 수명이기 때문이죠. using 지시어를 사용함을 비추천하는 이유입니다. 예제 5번을 해결해보도록 합시다.

 

1. count 호출을 명시적으로 호출한다.

 10번 라인을

::count = min(0, 1); 

교체합니다. 여기에서 사용하는 count 는 전역에 존재하는 변수명을 호출합을 표기합니다.

 

2. min 함수를 명시적으로 호출한다..

 4번 라인을 삭제합니다.

10번 라인을

count = std::min(0,1); 

교체합니다. 

 

2번과 같이 using namespace 사용하지 않고, 한정된 이름으로 호출함을 추천합니다. 추가적으로 이미 c++가 사용하고 있는 예약어는 되도록 사용하지 않음을 추천드립니다.

반응형

댓글