[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