[C++] 모호성(Ambiguity) _ Using

반응형
반응형

*개인적인 공부 기록용으로 작성한 글 이기에 잘못된 내용을 포함하고 있을 수 있습니다.

 

모호성(Ambiquity)

-1 모호성(Ambiquity)

-2 using namespace 사용 시 유의점 


-1 모호성(Ambiguity)

프로그래밍을 하다보면, 변수와 함수의 이름이 겹치는 경우가 발생할 수 있다. 객체지향 언어에서는 오버라이딩이나 오버로딩과 같이 동일한 이름의 함수를 사용하도록 권장하는 상황도 있다. 이 때 컴파일러는 어떠한 변수나 함수를 선택해야 할 지 모르는 모호성(Ambiguity)이 발생한다.

namespace a {
  int var = 10;
}

namespace b {
  int var = 10;
}

int main() {
  cout << var << endl; // 모호성 발생
  return 0;
}

 

이러한 모호성은 범위 지정 연산자(::)를 사용해 네임스페이스를 지정함으로써 해결할 수 있다.

#include <iostream>
using namespace std;

namespace a {
  int var = 10;
}

namespace b {
  int var = 10;
}

int main() {
  cout << a::var << endl; // namespace a's var
  cout << b::var << endl; // namespace b's var
  return 0;
}

 

혹은 using 문법을 사용해 네임스페이스 공간을 선언해 줌으로써 모호성을 해결하는 방법도 있다.

#include <iostream>
using namespace std;

namespace a {
  int var = 10;
}

namespace b {
  int var = 10;
}

int main() {
  using namespace a;
  cout << var << endl;
  return 0;
}

 

-2 using namespace 사용 시 유의점

단 using namespace를 헤더에 큰 영역으로 넣는것은 지양하고, cpp파일에 선언하는 것이 좋다.

그리고 되도록이면 "전역 사용"은 피하는것이 좋다.


반응형

댓글

Designed by JB FACTORY