반응형
namespace
- 특정 영역에 이름을 붙여주기 위한 문법적 요소
- namespace가 다르면 같은 이름의 선언이 허용된다.
- 여러 외부 라이브러리 사용 중 발생하는 문제를 해결하기 위해 만들어졌다.
- namespace는 다른 namespace 안에 삽입될 수 있다.
- namespace의 별칭 지정이 가능하다.
namespace 예제
#include <iostream>
namespace A
{
void Func()
{
std::cout << "Namespace A : Func()" << std::endl;
}
}
namespace B
{
void Func()
{
std::cout << "Namespace B : Func()" << std::endl;
}
}
void main()
{
A::Func();
B::Func();
//결과
//Namespace A : Func()
//Namespace B : Func()
}
- 위의 예제에서 ::을 범위지정 연산자라고 한다.
namespace 중첩 예제
#include <iostream>
namespace A
{
int num = 0;
namespace B
{
int num = 1;
}
namespace C
{
int num = 2;
}
}
void main()
{
std::cout << A::num << std::endl;
std::cout << A::B::num << std::endl;
std::cout << A::C::num << std::endl;
//결과
//0
//1
//2
}
namespace 별칭 지정 예제
#include <iostream>
namespace A
{
namespace B
{
int num = 1;
}
}
void main()
{
namespace AB = A::B;
std::cout << AB::num << std::endl;
//결과
//1
}
using
- namespace에 선언된 모든것에 대해 namespace 지정의 생략을 명령한다.
- 편리함은 증가하지만 무분별하게 사용하면 충돌이 발생할 확률이 상대적으로 높아진다.
using 예제
#include <iostream>
using namespace A;
using namespace C;
namespace A
{
int num = 0;
namespace B
{
int num = 1;
}
namespace C
{
int num = 2;
}
}
void main()
{
std::cout << num << std::endl; //모호함으로 인해 에러 발생
std::cout << B::num << std::endl; //namespace A 생략 가능
std::cout << C::num << std::endl; //namespace A 생략 가능
}
반응형
'Stack > C++' 카테고리의 다른 글
C++ 연산자 오버로딩 (대입, 인덱스 연산자) (0) | 2021.12.26 |
---|---|
C++ 연산자 오버로딩 (0) | 2021.12.05 |
C++ friend (0) | 2021.12.05 |
C++ 다중상속 (0) | 2021.11.22 |
C++ 멤버함수, 가상함수 동작원리 (0) | 2021.11.17 |