728x90
728x90
SMALL
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 안에 들어가서 판단이 어려워서 생기는 에러가 발생할 확률이 높아져서 !
728x90
300x250
LIST
'C │ C++ │ C# > C++' 카테고리의 다른 글
C++ Chapter 4.5 : 문자열 std::string 소개 (0) | 2023.08.20 |
---|---|
C++ Chapter 4.4 : auto와 자료형 추론, 형변환 (0) | 2023.08.19 |
C++ Chapter 4.2 : 정적변수, 전역변수, 내부연결, 외부연결 (0) | 2023.08.18 |
C++ Chapter 4.1 : 지역 변수, 범위, 지속 기간 (0) | 2023.08.18 |
C++ Chapter 3.3 : 비트끼리의 연산, 비트 플래그, 비트 마스크 (0) | 2023.08.17 |