-
[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