C++ 네임스페이스

C Namespace



C++의 네임스페이스는 일반화된 범위입니다. 선언은 예약어인 네임스페이스로 시작하고 그 뒤에 프로그래머가 선택한 이름이 오고 그 다음 중괄호로 묶인 블록이 옵니다. 블록에는 C++ 개체, 함수 및 기타 엔터티의 기본 선언 및/또는 정의가 포함되어 있습니다.

다음 프로그램에서 전역 범위의 다음 두 스칼라 문을 고려하십시오.







#포함하다
네임스페이스 표준 사용;

정수변수 ID= 5;
뜨다변수 ID= 2.3;

정수기본()
{

반품 0;
}

이 프로그램을 컴파일하려고 하면 컴파일 오류가 발생합니다. 이름이 같은 두 개의 변수가 있습니다. 변수 ID . 두 가지 다른 유형의 두 가지 다른 변수이지만, 정수 그리고 뜨다 , 컴파일러는 두 선언이 같은 이름이기 때문에 두 선언을 거부합니다. 다음 프로그램은 두 개의 다른 일반화된 범위에서 동일한 이름을 가진 변수를 선언하여 이 문제를 해결합니다.



#포함하다
네임스페이스 표준 사용;

네임스페이스 없음
{
정수변수 ID= 5;
}

네임스페이스 NB
{
뜨다변수 ID= 2.3;
}

정수기본()
{
비용<<없음::변수 ID << 'N';
비용<<주의::변수 ID << 'N';

반품 0;
}

출력은 다음과 같습니다.



5
2.3

위의 프로그램에는 두 개의 네임스페이스가 있습니다. 없음 , 이는 정수의 정의를 가지며, 주의 , float의 정의가 있지만 NA의 정수와 이름이 같습니다. 마지막으로 프로그램이 실행될 때 두 개의 다른 변수에 대해 동일한 이름이 사용되었습니다. 서로 다른 두 변수의 동일한 이름에 액세스하려면 네임스페이스의 특정 이름을 사용해야 하고 그 뒤에 공통 식별자가 와야 합니다. 네임스페이스 이름과 공통 식별자는 범위 확인 연산자로 구분되며, :: . 네임스페이스의 이름은 개체를 구별합니다.





이 기사에서는 네임스페이스의 기본 개념과 C++ 프로그래밍 언어에서의 사용법을 다룹니다. 이 문서를 따르려면 C++ 언어에 대한 기본 지식이 있어야 합니다. 이 기사에서 간략하게 설명하지만 C++ 범위에 대한 지식도 있어야 합니다. C++ 범위에 대해 자세히 알아보려면 linuxhint.com 웹 페이지의 검색 상자에서 Scope in C++(따옴표 제외)라는 구문을 검색하고 Enter 키를 누릅니다. 이 작성자가 작성한 기사로 연결됩니다.

기사 내용

네임스페이스란 무엇입니까?

선언적 영역은 엔터티(변수)의 이름이 유효한 프로그램의 가장 큰 부분입니다. 이 영역을 범위라고 합니다. C++의 네임스페이스는 이름 충돌을 해결하는 것이 주 목적인 일반화된 범위입니다. 네임스페이스에는 기본 선언 및/또는 엔터티 정의가 있습니다.



글로벌 네임스페이스와 그 문제

전역 네임스페이스는 전역 범위입니다. 다음 쇼트 프로그램을 고려하십시오.

#포함하다
네임스페이스 표준 사용;

정수아이덴티티= 55;
뜨다아이덴티티= 12.17;

정수기본()
{

반품 0;
}

위의 프로그램에는 두 개의 변수가 있습니다. 둘 다 아이덴티티 . 이러한 변수는 전역 범위에 있습니다. 즉, 전역 네임스페이스에 있습니다. 이 프로그램을 컴파일하려는 시도는 오류 메시지와 함께 실패합니다. 전역 범위는 이름이 같은 변수를 두 개 이상 허용하지 않으므로 사용자 지정 네임스페이스가 필요합니다.

커스텀 네임스페이스

네임스페이스에는 이름이 하나만 있는 것이 아닙니다. 대신 네임스페이스에는 다른 이름 집합과의 충돌을 피하기 위해 이름 집합이 있습니다. 코드 하단의 충돌을 방지하려면 각 이름 앞에 네임스페이스 이름을 입력하고 :: . 다음 프로그램은 두 개의 사용자 지정 네임스페이스를 사용하여 이를 보여줍니다.

#포함하다
네임스페이스 표준 사용;

네임스페이스 없음
{
정수변수= 6;
뜨다바람둥이;
}

네임스페이스 NB
{
정수변수= 7;
뜨다바람둥이;
}

정수기본()
{
비용<<없음::변수 << 'N';
비용<<주의::변수 << 'N';
없음::바람둥이 = 2.5;
주의::바람둥이 = 4.8;
비용<<없음::바람둥이 << 'N';
비용<<주의::바람둥이 << 'N';

반품 0;
}

출력은 다음과 같습니다.

6
7
2.5
4.8

이름은 NA::flt 그리고 주의::flt 궁극적으로 정의되었습니다. 기본() 기능. C++는 전역 범위에서 이러한 정의를 허용하지 않습니다.

사용자 지정 네임스페이스는 전역 네임스페이스에 대한 중첩된 네임스페이스입니다.

사용 지시문

네임스페이스를 선언한 후 name 대신 항상 namepace::name을 입력하지 않으려면 다음을 사용할 수 있습니다. 사용 지령. 사용할 구문 사용 지시문은 다음과 같습니다.

네임스페이스 Namespace_name 사용;

NS 사용 지시문은 전처리기 지시문이 아니므로 세미콜론(;)으로 끝납니다.

다음 프로그램은 사용 지시문 등:

#포함하다
네임스페이스 표준 사용;

네임스페이스 NB
{
정수변수= 7;
정수기능()
{
반품변수;
}
}

정수fn()
{
네임스페이스 NB 사용;
정수myVar2=기능();
//NB의 다른 객체와 함수가 따라옵니다.
반품myVar2;
}

정수myVar3=주의::기능();

정수기본()
{
비용<<fn() << '' <<myVar3<< 'N';

반품 0;
}

이 프로그램의 출력은 7 7 . 용어 네임스페이스 NB 사용 의 시작 부분에 배치되었습니다. fn() 정의. NS 기능() NB 네임스페이스 바로 아래에서 호출됩니다. 주의:: .

전역 범위(전역 이름 공간)에서 선언된 변수는 선언 지점부터 파일 끝까지 보입니다. 중첩된 네임스페이스(중첩된 범위)에서도 볼 수 있습니다. fn() 위의 기능 범위. NS 사용 지시문은 배치된 위치에서 배치된 범위의 끝까지 네임스페이스를 조인합니다.

이름 기능() NB 네임스페이스에서 아래에서 볼 수 없습니다. fn() 정의 때문에 네임스페이스 NB 사용 기능 범위(블록) 내에 배치되었습니다. 이 상태에서 사용하려면 기능() NB 네임스페이스 블록(범위) 외부에서는 앞에 와야 합니다. 주의:: , 다음 문에서와 같이:

정수myVar3=주의::기능();

NS 사용 지시문은 해당 네임스페이스를 배치된 위치에서 외부 중첩 네임스페이스의 끝까지 외부 중첩 네임스페이스와 결합합니다. 다음 프로그램에서 NA 네임스페이스는 전역 네임스페이스와 결합됩니다. 두 네임스페이스는 다음으로 확장됩니다. fn() NB 네임스페이스와 결합되는 함수 정의 네임스페이스. NB 네임스페이스는 fn() 함수 정의 및 이전의 두 네임스페이스는 파일 끝까지(코드를 통해 읽음) 계속됩니다.

#포함하다
네임스페이스 표준 사용;

네임스페이스 없음
{
정수변수= 6;
정수기능()
{
반품변수;
}

}

네임스페이스 NB
{
정수변수= 7;
정수기능()
{
반품변수;
}
}

네임스페이스 NA 사용;
정수myVar0=변수;
//:와 NB의 다른 객체와 함수가 뒤따릅니다.

정수fn()
{
정수myVar1=변수;
네임스페이스 NB 사용;
정수myVar2=주의::기능();
//이 범위가 끝날 때까지 NB의 다른 개체 및 함수가 따릅니다.
반품myVar1+myVar2;
}

//::와 NB의 객체와 함수만 따릅니다.

정수myVar3=주의::기능();

정수기본()
{
비용<<myVar0<< '' <<fn() << '' <<myVar3<< 'N';

반품 0;
}

출력은 6, 13, 7 .

메모: 전역 네임스페이스는 다음과 같이 표시됩니다. :: , 이는 뒤에 오는 범위 확인 연산자 앞에 아무것도 없음을 의미합니다.

성명서 아래에는 네임스페이스 NA 사용 전역 및 NA 네임스페이스의 변수는 소스 네임스페이스 표시 없이 사용할 수 있습니다. 다음 문은 다음을 사용합니다. 변수 NA 네임스페이스의 전역 및 NA 결합 네임스페이스 영역은 다음으로 확장됩니다. fn() 함수 네임스페이스. 그래서 변수 의 첫 번째 진술의 fn() 함수 범위는 NA 네임스페이스에 속합니다.

전역 및 NA 네임스페이스에 대한 영역이 전역으로 확장되기 때문에 fn() 범위, 이후 int myVar2 = NB::func(); , NB 네임스페이스의 모든 이름은 fn() 범위를 앞에 두지 않고 주의:: , NA 및 전역 네임스페이스(블록)에서 발생하지 않은 경우에만. 그렇지 않으면 다음이 선행되어야 합니다. 주의:: . NA 및 전역에 대한 결합된 네임스페이스 영역은 아래에 계속됩니다. fn() 정의와 기본() 파일 끝까지 기능.

NB 네임스페이스의 확장은 다음에서 시작됩니다. int myVar2 = NB::func(); 에서 fn() 블록과 끝에서 끝납니다. fn() 정의 블록.

메모: 영역이 결합된 네임스페이스는 여전히 충돌을 일으킬 수 있으므로 다른 네임스페이스 블록에서 동일한 변수 이름을 갖지 않아야 합니다.

네임스페이스 영역

네임스페이스는 범위입니다. 전역 네임스페이스(전역 범위)를 제외하고 모든 네임스페이스는 블록에서 선언되어야 합니다. 해당 블록은 네임스페이스의 분산 가능성이 있는 영역의 첫 번째 부분입니다. using 지시문을 사용하면 네임스페이스를 다른 범위의 영역으로 확장할 수 있습니다.

네임스페이스 본문에 선언된 엔터티를 네임스페이스의 멤버라고 하며 이러한 선언에 의해 네임스페이스의 선언적 영역에 도입된 이름을 네임스페이스의 멤버 이름이라고 합니다.

중첩된 네임스페이스

다음 프로그램은 중첩된 네임스페이스를 보여줍니다.

#포함하다
네임스페이스 표준 사용;

네임스페이스 A
{
정수NS= 1;
네임스페이스 B
{
정수NS= 2;
네임스페이스 C
{
정수NS= ;
}
}
}

정수기본()
{
비용<<에게::NS << '' <<에게::NS::NS << '' <<에게::NS::::NS << 'N';

반품 0;
}

출력은 다음과 같습니다.

1 2 3

범위 확인 연산자를 사용하여 세 개의 값에 액세스했음을 알 수 있습니다.

표준 네임스페이스

C++에는 표준 라이브러리라는 라이브러리가 있습니다. 이 라이브러리에 있는 개체, 함수 및 기타 엔터티의 이름은 다음과 같이 작성된 표준 네임스페이스라는 네임스페이스에서 가져온 것입니다. 시간 . 표준 라이브러리에는 하위 라이브러리가 포함되어 있으며 이러한 하위 라이브러리 중 하나는 아이오스트림 . NS 아이오스트림 라이브러리에 개체가 포함되어 있습니다. 비용 , 콘솔(터미널)에 결과를 보내는 데 사용됩니다.

이름 비용 에 있어야합니다 시간 네임스페이스. 사용 아이오스트림 그것의 시간 네임스페이스에서 프로그램은 다음과 같아야 합니다.

#포함하다
네임스페이스 표준 사용;

의 사용을 참고하세요 사용 지시와 시간 . 용어 #포함하다 전처리기 지시문이며 세미콜론으로 끝나지 않습니다. 지시문 위치에 iostream 파일을 포함합니다.

결론

네임스페이스는 범위입니다. 네임스페이스 설명(정의)에는 C++ 개체, 함수 및 기타 엔터티의 기본 선언 및/또는 정의가 포함됩니다. 네임스페이스 정의 외부에서 구문을 사용하여 이름에 액세스할 수 있습니다. 네임스페이스 이름::이름 . 전역 네임스페이스(전역 범위)를 제외하고 모든 네임스페이스는 블록에서 선언되어야 합니다. 해당 블록은 네임스페이스의 분산 가능성이 있는 영역의 첫 번째 부분입니다. 이랑 사용 지시문을 사용하면 네임스페이스를 다른 범위의 영역으로 확장할 수 있습니다. 영역이 결합된 네임스페이스는 다른 네임스페이스 블록에서 동일한 변수 이름을 갖지 않아야 합니다. 이렇게 하면 여전히 이름 충돌이 발생할 수 있습니다.

크리스