Trang tài liệu
Khóa học C++ nền tảng
Chương 10. Các khái niệm về ngôn ngữ
Tra cứu phụ thuộc đối số (ADL)

Tra cứu phụ thuộc đối số (ADL)

Tra cứu phụ thuộc đối số (ADL) hoặc Tra cứu Koenig là một cơ chế trong C++ cho phép trình biên dịch tìm kiếm hàm thích hợp để gọi dựa trên các loại đối số được cung cấp. Nó đặc biệt hữu ích khi sử dụng các hàm hoặc toán tử quá tải trong một không gian tên.

ADL cho phép trình biên dịch tìm các hàm trong cùng một không gian tên với các đối số, ngay cả khi hàm không được khai báo tại điểm sử dụng hoặc trong không gian tên được cung cấp. Điều này đặc biệt hữu ích khi làm việc với các mẫu hoặc lập trình chung.

Ví dụ

Hãy xem xét ví dụ sau sử dụng không gian tên và nạp chồng operator<<():

namespace MyNamespace {
    class MyClass {
    public:
        int value;
    };

    std::ostream& operator<<(std::ostream& os, const MyClass& obj) {
        os << "MyClass: " << obj.value;
        return os;
    }
}

int main() {
    MyNamespace::MyClass obj;
    obj.value = 42;
    using std::cout; // Bắt buộc phải sử dụng 'cout' mà không đủ điều kiện cho nó.
    cout << obj << std::endl; // ADL được sử dụng để nạp chồng 'operator<<'.
}

Trong ví dụ này, khi bạn gọi cout << obj; trong main(), ADL được sử dụng để tìm đúng nạp chồng operator<<() trong không gian tên MyNamespace vì đối số obj thuộc loại MyNamespace::MyClass.