- 4.4.1 using namespace
- 4.4.2 사용 시 유의사항
4.4.1 using namespace
using namespace는 많은 C++ 개발자들이 사용하는 키워드이다. 해당 키워드를 사용해서 코드 타이핑할 때 네임스페이스를 쓰는 시간을 절약할 수 있다.
using namespace std;
대표적으로 std를 생략해서 코드를 작성할 수 있겠다.
4.4.2 사용 시 유의사항
편하게 하는만큼 사용할 때 주의해야 하는 부분들이 있다. 우선 using namespace를 선언한 순간 해당 선언 부분이 속한 블럭에서는 선언 이후 계속 적용된다는 점이다.
#include <iostream>
int main()
{
using namespace std;
cout << "Hello " << endl;
return 0;
}
이처럼 main 함수 안에서는 std를 안쓰고 사용할 수 있지만 해당 함수 내부에서 선언한 것을 취소할 수 있는 기능은 주어지지 않는다. 따라서 적용시킬 부분만 적용되도록 최대한 사용하는 곳과 가까이 선언하자! 전역 위치에 선언하는건 좋지 않으니 위처럼 지역적으로 묶어서 사용하자. 또한 헤더 파일에 using namespace를 선언해버리면 해당 헤더 파일을 include하는 곳에 전부 영향을 미치니 헤더와 cpp로 분리하고 cpp에 선언해주는 습관을 가지자!
using namespace 대신 using만 사용하여 일부 함수들에 대해서만 생략을 적용시킬 수 있다.
#include <iostream>
int main()
{
using std::cout;
using std::endl;
cout << "Hello " << endl;
return 0;
}
아래처럼 namespace가 존재하고 using namespace를 사용하면 어떤 namespace의 my_var 변수를 사용하는지 모호해진다. 이때는 영역 지정 연산자(::)를 사용하여 소속을 확실히 해주자!
#include <iostream>
namespace a
{
int my_var(10);
int my_a(123);
}
namespace b
{
int my_var(20);
int my_b(456);
}
int main()
{
using std::cout;
using std::endl;
using namespace a;
using namespace b;
cout << my_var << endl; // a와 b에 둘다 있으니 모호해짐
cout << a::my_var << endl; // 영역지정 연산자를 통해 해결 가능
return 0;
}
최대한 잘게 쪼개서 작은 영역에 using namespace가 영향력을 행사하도록 작성하는 것도 하나의 방법이다.
// using문과 모호성
#include <iostream>
namespace a
{
int my_var(10);
int my_a(123);
}
namespace b
{
int my_var(20);
int my_b(456);
}
int main()
{
using std::cout;
using std::endl;
{
using namespace a;
cout << my_var << endl;
}
{
using namespace b;
cout << my_var << endl;
}
return 0;
}
'Programming Language > C++' 카테고리의 다른 글
Section 4.6. string 문자열 사용 (0) | 2021.11.27 |
---|---|
Section 4.5. 암시적 형 변환과 명시적 형 변환 (0) | 2021.11.16 |
Section 4.3. 외부 연결 (0) | 2021.11.11 |
Section 4.2. 전역 변수와 정적 변수 (0) | 2021.11.10 |
Section 4.1. 지역 변수, 범위, 지속기간 (0) | 2021.11.08 |