C++ Chapter 4.3 : using문과 모호성
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!
using 쓰임새
using
namespace std- std 네임스페이스 안에 있는 모든 것들을 std:: 안붙이고 그냥 사용할 수 있게 된다.
using
std::cout- 오로지 cout 만 이제 std:: 생략 가능
using
std::endl;- 오로지 endl 만 이제 std:: 생략 가능
using의 모호성
namespace a
{
int my_var = 123;
char aa = 'a';
}
namespace b
{
int my_var = 123;
char bb = 'b';
}
int main()
{
using namespace std;
using namespace a;
using namespace b;
cout << my_var << endl; // 에러 ! ! !
cout << aa << endl; // 에러 X
cout << bb << endl; // 에러 X
}
- cout « my_var « endl;
- 여기서의 my_var 이
- a 의 my_var 인지
- b 의 my_var 인지
- 알 수가 없기 떄문에 에러 ! !
a
네임스페이스 와b
네임스페이스- 둘 다 동명의 int my_var 변수를 갖고 있기 때문
cout << a::my_var << endl; cout << b::my_var << endl;
- 위와 같이 a:: b:: 를 붙여 구분할 수 밖에 없는데
- 이러면 using namespace a, b; 쓰는 이유가 없다……
- aa와 bb는 각각 a, b 네임스페이스에 있는게 명확히 구분히 되기 때문에 네임스페이스:: 안붙여도 에러 X
{
using namespace a;
cout << my_var << endl; // 에러 X
}
{
using namespace b;
cout << my_var << endl; // 에러 X
}
- 이렇게 a 의 my_var 쓰는 범위 따로, b의 my_var 쓰는 범위를
{}
로 따로 분리해주면 using
원래 목적을 살려a::
,b::
생략 가능- 첫번째 my_var 는 a의 my_var인게명확
- 두번째 my_var는 b의 my_var인게 명확
using namespace b;
{
using namespace a;
cout << my_var << endl; // 에러 ! ! !
}
cout << my_var << endl; // 에러 X
- 첫번째 my_var이 a의 my_var인지 b의 my_var인지 알 수가 없으므로 에러
{ }
범위에 더 큰 범위인 using namespace b; 의 영향도 미치기 때문
using의 위험성
- 전역으로 선언하는
using
은 지양하는 것이 좋다.- 헤더 파일같이 많이 include 되는 파일에
using
문을 전역으로 넣어버리면 에러 생길 가능성이 높아진다.- using 의
모호성
때문에 동일한 이름의 변수끼리 같은 범위의 using namespace 안에 들어가서 판단이 어려워서 생기는 에러가 발생할 확률이 높아져서 !
- using 의
- 헤더 파일같이 많이 include 되는 파일에
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기