markdown 이름공간(名称空间)과使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown 이름공간(名称空间)과使用相关的知识,希望对你有一定的参考价值。
# 이름공간(namespace)과 using
```c++
namespace Jack {
double pail;
void fetch();
struct Well {...};
}
namespace Jill {
double bucket(double n) {...};
double fetch;
int pal;
struct Hill{...};
}
```
- 이름 공간은 블록안에 놓일 수 없음
- 이름 공간에 선언된 이름은 기본적으로 외부 링크를 가짐
- 전역 이름 공간: 파일 수준의 선언 영역
- 전역 공간은 항상 이름을 추가할 수 있다.
- 전역 공간에 접근하는 방법
```c++
Jack::pail = 12.34;
Jill::Hill mole;
Jack::fetch();
```
## using 선언
```c++
namespace Jill {
double bucket (double n) {...}
double fetch;
int pal;
struct Hill {...};
}
char fetch;
int main()
{
using Jill::fetch; // fetch를 지역 이름 공간에 넣는다
double fetch; // 에러, 이미 지역 fetch가 존재함
cin >> fetch; // 값을 Jill::fetch에 저장한다
cin >> ::fetch; // 값을 전역 fetch에 저장한다
}
```
## using 지시자
```c++
using namespace Jack; // Jack에 속한 모든 이름을 사용할 수 있게 만든다
#include <iostream> // 이름들을 std라는 이름 공간에 넣는다
using namespace std; // 이름들을 전역적으로 사용할 수 있게 한다
```
- 이름공간의 이름이 지역 이름과 충돌하면 지역버전이 앞을 가린다
- using 지시자를 함수 안에 넣으면 함수 안에서만 사용할 수 있음
```c++
namespace Jill {
double bucket (double n) {...}
double fetch;
int pal;
struct Hill {...};
}
char fetch; // 전역 이름 공간
int main()
{
using namespace Jill; // 그 이름 공간의 모든 이름을 불러온다
Hill Trill; // Jill::Hill 구조체를 생성
double water = bucket(2); // Jill::bucket(); 을 사용한다
double fetch; // Jill::fetch를 가린다
cin >> fetch; // 값을 지역 fetch에 저장한다
cin >> ::fetch // 값을 전역 fetch에 저장한다
cin >> Jill::fetch // 값을 Jill::fetch에 저장한다
}
int foom()
{
Hill top; // 허용되지 않음
Jill::Hill crest; // 허용됨
}
```
## 이름공간 중첩
- 이 경우 flame 변수는 `elements::fire::flame` 으로 참조한다.
```c++
namespace elements
{
namespace fire
{
int flame;
...
}
float water;
}
```
- 이름 공간 안에 using 지시자와 using 선언을 사용할 수 있음.
```c++
using namespace elements::fire;
```
```c++
namespace myth
{
using Jill::fetch;
using namespace elements;
using std::cout;
using std::cin;
}
```
- jill::fetch에 접근하려면
```c++
std::cin >> myth::fetch;
std::cout << Jill::fetch; // myth::fetch에 저장한 값을 출력
```
- 이름공간의 alias를 만들 수 있음
```c++
namespace my_very_favorite_things { ... };
namespace mvft = my_very_favorite_things;
namespace MEF = myth::elements::fire;
using MEF::flame;
```
## 이름공간 팁
- 외부 전역 변수를 사용하지 말고, 이름이 명명된 이름 공간에 있는 변수를 사용
- 정적 전역 변수를 사용하지 말고, 이름이 명명되지 않은 이름 공간에 있는 변수를 사용
- 함수, 클래스를 개발하고 있다면, 그들을 하나의 이름 공간에 넣어라.
- using 지시자는 옛날 코드를 이름 공간 용도로 변환하는 임시 수단으로 사용
- using 지시자를 헤더 파일에 사용하지 말것.어떠한 이름들을 사용할 수 있게 하는지 알 수 없기 때문.
- 사용 범위 결정 연산자 또는 using 선언을 사용하여 이름을 선택적으로 들여올것
- using 선언에 대해 전역 범위 대신 선택적으로 지역 범위를 사용
以上是关于markdown 이름공간(名称空间)과使用的主要内容,如果未能解决你的问题,请参考以下文章