ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++] ADL (Argument Dependent Lookup) 이해하기
    C++/C++ 실습 2024. 11. 10. 08:55

    ADL (Argument Dependent Lookup) 정의

    ADJ는 C++ 98부터 도입된 개념이며 함수 인자가 소속된 네임스페이스를 기준으로 함수를 자동으로 찾아 호출하게 해주는 기능이다. 자동으로 인자의 네임스페이스에서 탐색하여 함수를 찾게 해준다.

     

    예제 코드:

    #include <iostream>
    
    namespace MyNamespace {
        struct MyType {};
    
        void myFunction(MyType) {
            std::cout << "MyNamespace::myFunction called" << std::endl;
        }
    }
    
    int main() {
        MyNamespace::MyType obj;
    
        // myFunction을 호출할 때, MyNamespace를 명시하지 않았지만 ADL에 의해 찾게 됩니다.
        myFunction(obj);  // "MyNamespace::myFunction called" 출력
    
        return 0;
    }

     

    위 코드에서 MyNamespace 내 구조체인 MyType 형태로 obj를 정의했다. 그리고 MyNamespace 안의 함수인 myFunction에 함수 인자 obj를 넣을 경우, myFunction 함수에 추가적으로 네임스페이스를 명시하지 않더라도 자동으로 obj가 속한 네임스페이스에서 해당 함수를 검색해준다.

     

    에러 코드:

    #include <iostream>
    
    struct MyType {};
    
    namespace MyNamespace {    
        void myFunction(MyType) {
            std::cout << "MyNamespace::myFunction called" << std::endl;
        }
    }
    
    int main() {
    
        MyType obj;
    
        myFunction(obj);  // 함수가 정의되어 있지 않습니다. 메시지 출력
    
        return 0;
    }

     

    위 코드에서는 myFunction에 대해 네임스페이스 명시가 추가적으로 필요하다. ADL에 따라 함수 인자의 네임스페이스에서 자동으로 함수를 찾아준다. 하지만 위 케이스에서 함수인자는 함수가 정의된 네임스페이스와 연결되어 있지 않기 때문에, ADL 규칙을 벗어나게 된다.

     

    ADL 예제

    'C++ > C++ 실습' 카테고리의 다른 글

    [C++] 스마트 포인터 활용하기  (1) 2025.06.01
    [C++] 람다 함수 활용 방법 (Lambda Expression)  (0) 2025.05.18
Designed by Tistory.